如果不为空,则 NullToVisibilityConverter 使可见
Posted
技术标签:
【中文标题】如果不为空,则 NullToVisibilityConverter 使可见【英文标题】:NullToVisibilityConverter make visible if not null 【发布时间】:2014-03-23 06:38:30 【问题描述】:想要在列表视图中隐藏和显示 SelectedItem 的属性网格
<UserControl xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
<ListView>
<!--here is list view-->
</ListView>
<xctk:PropertyGrid SelectedObject="Binding Active" Visibility="Binding Active, Converter=NullToVisibilityConverter" >
</xctk:PropertyGrid>
</UserControl>
所以我需要转换器并在可见性属性转换器中使用它。有什么帮助吗?
【问题讨论】:
How to hide a control if the underlying DataContext is null?的可能重复 【参考方案1】:public class NullVisibilityConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
return value == null ? Visibility.Hidden : Visibility.Visible;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
throw new NotImplementedException();
然后在您的 XAML 资源中引用 NullVisibilityConverter。
<StackPanel.Resources>
<simpleXamlContent:NullVisibilityConverter x:Key="NullToVisibilityConverter"/>
</StackPanel.Resources>
【讨论】:
如何在我的 xaml 中使用它?<StackPanel Visibility="Binding MyObject, Converter=StaticResource NullToVisibilityConverter">
【参考方案2】:
要使用转换器,我们可以在资源中创建一个,并在绑定语句中将其称为静态资源。
<UserControl xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit">
<UserControl.Resources>
<yournamespace:NullVisibilityConverter x:Key="NullToVisibilityConverter"/>
</UserControl.Resources>
<ListView>
<!--here is list view-->
</ListView>
<xctk:PropertyGrid SelectedObject="Binding Active" Visibility="Binding Active, Converter=StaticResource NullToVisibilityConverter" >
</xctk:PropertyGrid>
</UserControl>
和转换器类本身
public class NullVisibilityConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
return value == null ? Visibility.Hidden : Visibility.Visible;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
throw new NotImplementedException();
【讨论】:
感谢您展示如何实现 NullToVisibilityConverter。我有一个获取刷新按钮的 DataGrid,但仅在某些情况下。将 Button 的 Image 源设置为 null 隐藏了图像,但保留了在鼠标悬停时可见的按钮。我在 Button 的 Visibility 属性上使用了这个转换器,效果很好。谢谢!【参考方案3】:还有一些更有用的版本允许设置默认的隐身值:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
string defaultInvisibility = parameter as string;
Visibility invisibility = (defaultInvisibility != null) ?
(Visibility)Enum.Parse(typeof(Visibility), defaultInvisibility)
: Visibility.Collapsed;
return value == null ? invisibility : Visibility.Visible;
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
return DependencyProperty.UnsetValue;
在资源中的任何地方添加:
<converters:NullReferenceToVisibilityConverter x:Key="NullToVis" />
然后像那里一样使用它:
<StackPanel Visibility="Binding MyObject, Converter=StaticResource NullToVis">
<StackPanel Visibility="Binding MyObject, Converter=StaticResource NullToVis, ConverterParameter=Hidden">
【讨论】:
以上是关于如果不为空,则 NullToVisibilityConverter 使可见的主要内容,如果未能解决你的问题,请参考以下文章
如果不为空,则 NullToVisibilityConverter 使可见