5

我有一个 DataTemplate 显示具有三个字段的对象,例如:

Name = "Font Color"
Value = "Orange"
Editable = "True"

但我想将它们显示为例如:

字体颜色:橙色可编辑

但是我很难找到在此处使用触发器的语法,以便在字段 Editable="True" 时显示“Editable”

有谁知道这样做的语法?

以下代码导致“无法在属性中使用绑定”:

<DataTemplate x:Key="settingsItemTemplate">
    <StackPanel Orientation="Horizontal">
        <Label Content="{Binding XPath=Name}" ContentStringFormat=" {0}:"/>
        <Label Content="{Binding XPath=Value}"/>
        <Label>
            <Label.Triggers>
                <Trigger Property="{Binding XPath=Editable}" Value="True">
                    <Setter Property="Content" Value="Editable"/>
                </Trigger>
                <Trigger Property="{Binding XPath=Editable}" Value="False">
                    <Setter Property="Content" Value="NOT Editable"/>
                </Trigger>
            </Label.Triggers>
        </Label>
    </StackPanel>
</DataTemplate>
4

1 回答 1

11

使用 aTextBlock而不是 a会起作用Label吗?在这种情况下,您应该能够绑定到TextBlock一个属性。Text

如果您真的想使用 a Label,另一种方法是创建两个DataTemplate's - 一个用于可编辑的情况,另一个用于不可编辑的情况。然后,您可以将该ContentTemplate属性绑定到适当的模板。

更新:在进一步研究之后,它看起来Trigger不支持其Property属性的绑定。但是,DataTrigger确实支持这一点:

<StackPanel>
    <CheckBox Name="EditableCheckBox">Is Editable</CheckBox>
    <Label>
        <Label.Resources>
            <Style TargetType="{x:Type Label}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=EditableCheckBox, Path=IsChecked}" Value="True">
                        <Setter Property="Content" Value="Editable" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=EditableCheckBox, Path=IsChecked}" Value="False">
                        <Setter Property="Content" Value="NOT Editable" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Label.Resources>
    </Label>
</StackPanel>

您应该能够修改Binding属性以绑定到您的 XML 数据源,而不是执行另一个控件的值。

于 2009-02-11T12:34:15.447 回答