【发布时间】:2011-09-28 00:03:03
【问题描述】:
是否可以在不引入类似这样的新变量的情况下做类似的事情
bool showsearch = !ShowUser;
Visibility="{Binding !ShowUser, Converter={StaticResource BoolToVis}}"
【问题讨论】:
标签: xaml data-binding
是否可以在不引入类似这样的新变量的情况下做类似的事情
bool showsearch = !ShowUser;
Visibility="{Binding !ShowUser, Converter={StaticResource BoolToVis}}"
【问题讨论】:
标签: xaml data-binding
您可以使用样式和DataTrigger 来实现。将样式应用于相关元素,并提供 2 个数据触发器值 - 一个将可见性设置为 true,一个设置为 false。类似于DataTrigger where value is NOT null?
【讨论】:
我认为不可能,你必须像这样创建一个反向可见性转换器,
public class InvertedBooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool flag = false;
if (value is bool)
{
flag = (bool) value;
}
else if (value is bool?)
{
bool? nullable = (bool?) value;
flag = nullable.Value;
}
return flag ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value is Visibility && (Visibility) value == Visibility.Collapsed;
}
}
【讨论】:
您可以编写一个转换器 BoolToCollapsed 转换器示例
public class BoolToVisibleConverter : ConverterMarkupExtension<BoolToVisibleConverter>,
IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
bool obj=(bool) value;
if(!obj)
return Visibility.Collapsed;
else
return Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
Visibility obj=(Visibility) value;
if(obj==Visibility.Visible)
return true;
else
return false;
}
}
将静态资源添加到 Window.Resources
<Window.Resources>
<converter:BoolToVisibleConverter x:Key="BoolToCollapsed"/>
</Window.Resources>
然后将其用于 Grid、DockPanel 或任何其他
<DockPannel Visibility={Binding DockVisible,
Converter={StaticResource BoolToCollapsed}/>
【讨论】: