如何绑定到按钮的TextElement.Foreground?

时间:2013-10-02 07:27:18

标签: wpf binding

我有以下按钮:

<Button>
        <Path Stroke="???" Data="M0,5 H10 M5,5 V10Z" />
</Button>

我想将路径的Stroke属性绑定到按钮的基础内容展示器的TextElement.Foreground属性。有了它,它总是与任何其他按钮中的任何文本颜色相同。

我尝试了什么:

{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource TemplatedParent}}

我得到的是由System.IO.FileNotFoundException引起的XamlParseException。它说无法找到程序集RibbonControlsLibrary。我的错是什么?还有其他方法吗?

问候,Yggdrasil

2 个答案:

答案 0 :(得分:4)

我可以回答我自己的问题。

首先我需要的是:

{Binding Path=(TextElement.Foreground), RelativeSource={RelativeSource AncestorType=ContentPresenter}}

但我也有例外。我看到我的项目以某种方式引用了RibbonControlsLibrary。我删除了这个并没有例外。有趣的是,如果我使用明确的颜色,我也没有例外。

我发现的另一件事是,在Windows 7标准主题中我可以使用{Binding Foreground, ElementName=button},因为它是这样实现的:

<Trigger Property="IsEnabled" Value="false">
       <Setter Property="Foreground" Value="#ADADAD"/>
</Trigger>

在Windows 8中,这不起作用,因为实现已更改为:

<Trigger Property="IsEnabled" Value="false">
       [...]
       <Setter Property="TextElement.Foreground" Value="{StaticResource Button.Disabled.Foreground}" TargetName="contentPresenter" />
</Trigger>

的问候,Yggdrasil的。

答案 1 :(得分:1)

您应该使用RelativeSource={RelativeSource AncestorType=Button}代替RelativeSource={RelativeSource TemplatedParent}

RelativeSource={RelativeSource Self}也有效。

我认为你所做的不起作用的原因是因为路径不在按钮的模板中。这是它的内容。