我有一个显示三个字段的对象的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>
答案 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数据源,而不是执行另一个控件的值。