我该怎么做呢
<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编写整个方法的情况下进行反转? 或者我应该让这些图像重叠并在需要时隐藏一个?
答案 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();
}
}