0

我有一些标签的数据模板,我想做的是根据配置设置在运行时隐藏一些标签。

我已将标签的可见性绑定到属性,但即使属性显示为 False,标签也不会隐藏。

下面是我的xml

<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);
    }
4

3 回答 3

3

您的变量是布尔值,但 Visibility 是一个枚举(可见、隐藏、折叠)。您需要使用 .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}}"/>
于 2013-06-19T07:30:10.627 回答
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>
于 2013-06-19T07:35:06.757 回答
0

知道了,我的属性需要是 Visibility 类型才能工作。

财产

    public Visibility ShowLabels
    {
        get
        {
            return _showLabels;
        }
        private set
        {
            _showLabels = value;
            OnPropertyChanged("ShowLabels");
        }
    }

构造函数

    public DisplayScopeRecord()
    {
        if (AppContext.Instance.DicomizerEnabled)
        {
            ShowLabels = Visibility.Hidden;
        }
    }
于 2013-06-19T03:09:10.770 回答