在ControlTemplate之外是否有与TemplateBinding等效的东西
本文关键字:TemplateBinding ControlTemplate 是否 | 更新日期: 2023-09-27 18:19:31
我是WPF样式部分的新手。我想做的是在setter中获取附加属性的值,例如:
<Trigger Property="SomeProperty" Value="SomeValue">
<Setter Property="SomeProperty"
Value="(My attached property, let's say lcl:MyClass.MyString)"/>
</Trigger>
我知道在ControlTemplate
中使用{TemplateBinding lcl:MyClass.MyString}
可以得到这样的效果。我的问题是:你能在不使用ControlTemplate
的情况下以一种风格来做这件事吗?
您可以尝试使用:
<Setter Property="SomeProperty" Value="{Binding Path=(lcl:MyClass.MyString), RelativeSource={RelativeSource self}}"/>
如果附加的属性作为样式应用于元素。如果没有,则可以使用RelativeSource或ElementName查找相应的元素。
我不确定你是怎么做到的,因为你的代码缺乏细节。以下代码工作:
<UserControl.Resources>
<Style x:Key="LabelStyle" TargetType="{x:Type Label}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Content"
Value="{Binding Path=(TestWebBrowser:AttachP.ValueEditorState), RelativeSource={RelativeSource self}}"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel>
<Label x:Name="label" TestWebBrowser:AttachP.ValueEditorState="HelloWorld" Style="{StaticResource LabelStyle}"/>
<Button Content="Disable Label" Click="Button_Click"/>
</StackPanel>
Button的单击事件处理程序将Label的IsEnabled设置为false以触发触发器。请注意,您必须在绑定中使用带括号的Path=。