【发布时间】:2010-11-12 14:38:47
【问题描述】:
我有一个StackPanel,我只想在SomeTabControl.SelectedItem != null 时显示它。如何在 WPF 绑定中执行此操作?
【问题讨论】:
标签: wpf data-binding visibility
我有一个StackPanel,我只想在SomeTabControl.SelectedItem != null 时显示它。如何在 WPF 绑定中执行此操作?
【问题讨论】:
标签: wpf data-binding visibility
创建一个转换器,将一个可为空的值转换为一个 System.Windows.Visibility 值并将其用于您的绑定。
例如:
<StackPanel x:Name="myPanel" Visibility="{Binding Path=SelectedItem, Mode=OneWay, ElementName=SomeTabControl, Converter={StaticResource visibilityConverter}}" />
转换器类的代码:
public class VisibilityConverter : IValueConverter
{
#region [ IValueConverter ]
public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
if( value == null )
return System.Windows.Visibility.Collapsed;
return System.Windows.Visibility.Visible;
}
public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
throw new NotSupportedException( );
}
#endregion
}
附:这假定在您的控件的 XAML 中有一个名为 visibilityConverter 的静态资源。
【讨论】:
您可以通过使用样式和触发器在不使用转换器的情况下做到这一点:
<StackPanel>
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger
Binding="{Binding SelectedItem,ElementName=tabControl1}"
Value="{x:Null}">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
<Style.Triggers>
</Style>
</StackPanel.Style>
</StackPanel>
此示例默认显示 StackPanel,但当 tabControl1 上的 SelectedItem 为 null 时将其隐藏。
【讨论】: