Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How and Where to Create StaticResource Key for a Converter within the Simple XAML Window?

I'm having a simple WPF XAML Window, I need to Create a StaticResource Key with in the following XAML.

The XAML Source Code is

<Window x:Class="WpfApplication1.Trigger"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:super="clr-namespace:WpfApplication1"
        Title="Trigger" Height="300" Width="300">
    <Grid>
        <Border x:Name="m_Border" Width="100" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FFF2FFC6" Margin="0,20,0,0">
            <Button x:Name="btn" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Visibility="{Binding IsMouseOver,ElementName=m_Border, Converter={StaticResource BooleanToVisibilityConverterKey}, ConverterParameter=Normal}"/>
        </Border>
    </Grid>
</Window>

My Converter C# Source Code:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;

namespace WpfApplication1
{

    public enum BooleanToVisibilityConverterType
    {
        Normal = 1,
        Reverse = 2
    }

    public class BooleanToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var targertValue = false;

            if (value == null)
            {
                throw new Exception("BooleanToVisibilityConverter - Convert Error");
            }
            else if (!Boolean.TryParse(value.ToString(), out targertValue))
            {
                throw new Exception("BooleanToVisibilityConverter - Convert Error");
            }
            else
            {
                var parameterValue = BooleanToVisibilityConverterType.Normal;

                if (parameter != null)
                {
                    Enum.TryParse<BooleanToVisibilityConverterType>(parameter.ToString(), out parameterValue);
                }

                if (parameterValue == BooleanToVisibilityConverterType.Reverse)
                {
                    return targertValue ? Visibility.Collapsed : Visibility.Visible;
                }
                else
                {
                    return targertValue ? Visibility.Visible : Visibility.Collapsed;
                }
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var targetValue = Visibility.Collapsed;

            if (value == null)
            {
                throw new Exception("BooleanToVisibilityConverter - ConvertBack Error");
            }
            else if (!Enum.TryParse<Visibility>(value.ToString(), out targetValue))
            {
                throw new Exception("BooleanToVisibilityConverter - ConvertBack Error");
            }
            else
            {
                var parameterValue = BooleanToVisibilityConverterType.Normal;

                if (parameter != null)
                {
                    Enum.TryParse<BooleanToVisibilityConverterType>(parameter.ToString(), out parameterValue);
                }

                if (parameterValue == BooleanToVisibilityConverterType.Reverse)
                {
                    return targetValue == Visibility.Visible ? false : true;
                }
                else
                {
                    return targetValue == Visibility.Visible ? true : false;
                }
            }
        }
    }
}

I need a Converter Key with Name BooleanToVisibilityConverterKey for the Converter BooleanToVisibilityConverter

like image 769
B.Balamanigandan Avatar asked Dec 18 '15 08:12

B.Balamanigandan


1 Answers

You can define your Converter in the Window.Resources element.

<Window ...
        >
    <Window.Resources>
        <super:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverterKey"/>
    </Window.Resources>
    ...

It could be a better idea to make this converter global. This will save you from having to define the converter in every new Window. It also means that your converter is only instantiated once, therefore improving performance slightly.

To achieve this, define the converter in App.xaml instead.

<Application ...
             xmlns:super="clr-namespace:WpfApplication1">
    <Application.Resources>
        <super:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverterKey"/>
    </Application.Resources>
</Application>
like image 93
Mike Eason Avatar answered Sep 22 '22 22:09

Mike Eason