布尔到可见性转换器

时间:2014-02-22 07:02:34

标签: c# wpf converter

我该怎么做呢

<BooleanToVisibilityConverter x:Key="BoolToVis"/>

<WrapPanel>
     <TextBlock Text="{Binding ElementName=ConnectionInformation_ServerName,Path=Text}"/>
     <Image Source="Images/Icons/Select.ico" Margin="2" Height="15" Visibility="{Binding SQLConnected,Converter={StaticResource BoolToVis},ConverterParameter=true}"/>
     <Image Source="Images/Icons/alarm private.ico" Margin="2" Height="15" Visibility="{Binding SQLConnected,Converter={StaticResource BoolToVis},ConverterParameter=false}"/>
</WrapPanel>

是否有一种方法可以使用布尔到vis转换器,但是在没有用C编写整个方法的情况下进行反转? 或者我应该让这些图像重叠并在需要时隐藏一个?

2 个答案:

答案 0 :(得分:6)

据我所知,你必须为此编写自己的实现。这是我使用的:

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool boolValue = (bool)value;
        boolValue = (parameter != null) ? !boolValue : boolValue;
        return boolValue ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我通常设置ConverterParameter='negate'所以在代码中清楚地知道参数是做什么的。不指定ConverterParameter使转换器的行为类似于内置的BooleanToVisibilityConverter。如果您希望您的用法有效,您当然可以使用bool.TryParse()解析ConverterParameter并对其做出反应。

答案 1 :(得分:0)

来自@K Mehta(https://stackoverflow.com/a/21951103/1963978),稍微更新了Windows 10 Universal应用程序的方法签名(从&#34; CultureInfo culture&#34;更改为&#34;字符串语言&#34;,每https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh701934.aspx):

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, string language)
    {
        bool boolValue = (bool)value;
        boolValue = (parameter != null) ? !boolValue : boolValue;
        return boolValue ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, string language)
    {
        throw new NotImplementedException();
    }
}