我的数据模板有一些标签,我想要做的是在运行时隐藏一些标签,具体取决于配置设置。
我已将标签的可见性绑定到属性,但即使属性显示为False,也不会隐藏标签。
以下是我的xaml
<Label x:Name="lblWashingMachineName" Content="{x:Static Resources:Translations.MainWindow_WashingMachineName}"
Grid.Row="6" Grid.Column="2" Style="{StaticResource styleLabelBig}" Visibility="{Binding Path=ShowLabels}"></Label>
属性
public bool ShowLabels
{
get
{
return _showLabels;
}
private set
{
_showLabels = value;
OnPropertyChanged("ShowLabels");
}
}
在构造函数中设置属性
public DisplayScopeRecord()
{
ShowLabels = !(AppContext.Instance.DicomizerEnabled);
}
答案 0 :(得分:3)
您的变量是布尔值,但Visibility是枚举(Visible,Hidden,Collapsed)。您需要使用.NET内置的BooleanToVisibilityConverter将布尔值转换为可见性。
<BooleanToVisibilityConverter x:Key="BoolToVis" />
<Label x:Name="lblWashingMachineName" Content="{x:Static Resources:Translations.MainWindow_WashingMachineName}"
Grid.Row="6" Grid.Column="2" Style="{StaticResource styleLabelBig}" Visibility="{Binding Path=ShowLabels, Converter={StaticResource BoolToVis}}"/>
答案 1 :(得分:0)
知道我的属性需要是Visibility类型才能工作。
属性
public Visibility ShowLabels
{
get
{
return _showLabels;
}
private set
{
_showLabels = value;
OnPropertyChanged("ShowLabels");
}
}
构造
public DisplayScopeRecord()
{
if (AppContext.Instance.DicomizerEnabled)
{
ShowLabels = Visibility.Hidden;
}
}
答案 2 :(得分:0)
您应该覆盖标签的样式,并在 ShowLabels 属性的值上设置数据触发器。
<Label x:Name="lblWashingMachineName" Content="{x:Static Resources:Translations.MainWindow_WashingMachineName}" Grid.Row="6" Grid.Column="2">
<Label.Style>
<Style BasedOn="{StaticResource styleLabelBig}" TargetType="{x:Type Label}">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ShowLabels}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>