如何在运行时隐藏标签

时间:2013-06-19 02:16:56

标签: wpf

我的数据模板有一些标签,我想要做的是在运行时隐藏一些标签,具体取决于配置设置。

我已将标签的可见性绑定到属性,但即使属性显示为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);
    }

3 个答案:

答案 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>