绑定到内部样式模板中的属性值失败

时间:2016-02-24 18:20:12

标签: c# wpf xaml data-binding

我在尝试将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}}",以及其他变体,但似乎无法让它发挥作用。

1 个答案:

答案 0 :(得分:3)

我相信你想要这个,虽然听起来你有可能尝试过吗?我不知道为什么它不起作用......

Value="{Binding ToggleButtonMouseoverColor, RelativeSource={RelativeSource AncestorType={x:Type local:Expander}}}"