WPF:为什么我不能从控件模板触发器中读取附加的 属性?
WPF: Why can't I read an attached property from inside a control-template trigger?
在WPF中,我为一个按钮创建了一个ControlTemplate,并试图通过触发器改变背景画笔。为了存储画笔的值,我使用了一个附加的 属性.
我测试了附加的 属性 本身,它运行良好 - 它可以设置,也可以绑定到(比如当我简单地将背景绑定到那个 属性 时)。
但是当我尝试在触发器中获取 属性 时(将背景更改为 属性 的值),甚至没有读取该值(正如我在断点时看到的那样在附件中 属性 getter),背景变为透明。
我该如何解决这个问题?
<ControlTemplate x:Key="DefaultButtonTemplate" TargetType="{x:Type Button}">
<Border
x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True"
>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ButtonAttachedProperties.BackgroundOnMouseOver}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
它误会你了。它认为您引用的是 属性 的 属性,而不是一个 属性 的两部分名称。尝试使用括号消除歧义,如下所示:
Path=(myns:ButtonAttachedProperties.BackgroundOnMouseOver)
不要忘记命名空间。
在WPF中,我为一个按钮创建了一个ControlTemplate,并试图通过触发器改变背景画笔。为了存储画笔的值,我使用了一个附加的 属性.
我测试了附加的 属性 本身,它运行良好 - 它可以设置,也可以绑定到(比如当我简单地将背景绑定到那个 属性 时)。
但是当我尝试在触发器中获取 属性 时(将背景更改为 属性 的值),甚至没有读取该值(正如我在断点时看到的那样在附件中 属性 getter),背景变为透明。
我该如何解决这个问题?
<ControlTemplate x:Key="DefaultButtonTemplate" TargetType="{x:Type Button}">
<Border
x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True"
>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ButtonAttachedProperties.BackgroundOnMouseOver}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
它误会你了。它认为您引用的是 属性 的 属性,而不是一个 属性 的两部分名称。尝试使用括号消除歧义,如下所示:
Path=(myns:ButtonAttachedProperties.BackgroundOnMouseOver)
不要忘记命名空间。