我在尝试将Fill
(在Elipse
控件中)的ToggleButton
属性绑定到另一个控件的自定义DependencyProperty
时出现问题。
下面是提示“属性路径无效”错误的XAML代码 - 它是Expander
控件的资源字典文件。
错误的一句话:
Value="{Binding Path=(local:Expander.ToggleButtonMouseoverColor)}"
第一个代码块 - MixSelectorExpanderButtonStyle
附加到扩展器的样式定义,在第二个代码块中可以看到。
<Style x:Key="MixSelectorExpanderButtonStyle" TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Circle" Property="Fill" Value="{Binding Path=(local:Expander.ToggleButtonMouseoverColor)}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我确信该属性是正确的 - 在同一个文件中,我能够无错误地访问ToggleButtonMouseoverColor
属性:
<Style TargetType="{x:Type local:Expander}">
<Style.Triggers>
<Trigger Property="Status" Value="0">
<Setter Property="ToggleButtonMouseoverColor" Value="{DynamicResource ZKGeneric_Highlight_MouseOver}" />
</Trigger>
</Style.Triggers>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Expander}">
<ToggleButton style=""{StaticResource MixSelectorExpanderButtonStyle}" />
</ControlTemplate>
</Setter.Value>
</Setter.Value>
</Style>
当我从路径中删除local:
前缀时,错误会更改为无法识别或无法访问的属性。
如果我将样式定义命名并将绑定更改为:
Value="{Binding Path=ExpanderStyle.ToggleButtonMouseoverColor}"
我能够构建并运行它,但它似乎只是一个空值。
显然我缺少一些正确指向属性的语法,但这是我第一次尝试以这种错综复杂的方式进行绑定。
如果没有,是否有更优化的方法来定义此行为?
任何帮助都将受到赞赏,与此同时,我将尝试咨询我的WPF程序员的参考。
修改
我忘了提及,我一直在尝试使用Value="{Binding ToggleButtonMouseoverColor, RelativeSource={RelativeSource TemplatedParent}}"
,以及其他变体,但似乎无法让它发挥作用。
答案 0 :(得分:3)
我相信你想要这个,虽然听起来你有可能尝试过吗?我不知道为什么它不起作用......
Value="{Binding ToggleButtonMouseoverColor, RelativeSource={RelativeSource AncestorType={x:Type local:Expander}}}"