在标签上设置触发器的XAML语法是什么?

时间:2009-02-11 12:12:02

标签: xaml triggers

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

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

但我希望将它们显示为例如:

字体颜色:橙色可编辑

但是我在找到使用触发器的语法时遇到了麻烦,例如当字段Editable =“True”

时显示“可编辑”

有没有人知道这样做的语法?

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

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

1 个答案:

答案 0 :(得分:10)

使用TextBlock代替Label会有用吗? TextBlock确实有一个Text属性,在这种情况下你应该能够绑定它。

如果你真的想使用Label,另一种方法是创建两个DataTemplate - 一个用于可编辑的情况,另一个用于不可编辑的情况。然后,您可以将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数据源,而不是执行另一个控件的值。