Style
:<Style x:Key="Test" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<StackPanel>
<TextBlock x:Name="text" Text="{TemplateBinding Content}" />
<TextBlock x:Name="demo" Text="{Binding RelativeSource={RelativeSource TemplatedParent}}" />
</StackPanel>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}">
<DataTrigger.Value>
<system:String>Test</system:String>
</DataTrigger.Value>
<Setter TargetName="test" Property="Foreground" Value="Red" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在这个示例中,意图是如果按钮文本等于单词“Test”,则将其文本变为红色1。但是它不起作用,因为触发器的
TemplatedParent
绑定解析为null,而不是应用样式的Button
。然而,名为“demo”的TextBlock
将其Text
设置为“System.Windows.Controls.Button:[ButtonText]”,这意味着TemplatedParent
在那个级别上正常工作。为什么它在DataTrigger
内部不起作用呢?
1我知道还有其他方法可以实现,但我试图理解为什么绑定不按照我的预期工作。
DataTrigger
,因为我真正使用的是 TemplatedParent 的非依赖属性。 - dlf