3

我有以下按钮:

<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

4

2 回答 2

6

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

首先我需要的是:

{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>

问候,世界树。

于 2013-10-02T08:26:03.883 回答
1

您应该使用RelativeSource={RelativeSource AncestorType=Button}而不是RelativeSource={RelativeSource TemplatedParent}.

RelativeSource={RelativeSource Self}也有效。

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

于 2013-10-02T07:40:18.327 回答