我有以下按钮:
<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
答案 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}
也有效。
我认为你所做的不起作用的原因是因为路径不在按钮的模板中。这是它的内容。