多次使用MergedDictionary中的样式

时间:2013-05-17 13:39:18

标签: c# wpf styles resourcedictionary

我有一年前发布的同一个问题here,但正如在那里的评论所述,所谓的正确答案根本不起作用。

我的设置类似于原始问题中描述的设置:我有一个资源字典,其中包含两个BitmapImages和一个要应用于PushButton的Style,它根据IsChecked属性上的触发器选择其中一个图像。 / p>

第二资源字典(例如,包含一个资源字典的单独xaml文件)通过MergedDictionary添加第一资源字典(例如,第一xaml文件),然后将该样式应用于多个 PushButtons。但由于某些原因我无法理解,这种风格一次只适用于一个 PushButton。切换不同的PushButton然后将样式应用于新切换的PushButton并将其从先前的PushButton中删除。

这种行为显然不是预期的行为。我想发布xaml代码,但是它没有出现在预览中,即使我像其他任何代码一样缩进它。为了发布xml,我需要做些什么特别的事情吗?

以下是两个屏幕截图,显示出现了什么问题。首先,两个标记的PushButton都没有应用样式,即使我在xaml文件中指定了多少(Style = {StaticResource name})。

Exhibit A: Toggling the first button somehow applies the style to it Exhibit A: Toggling the second button somehow applies the style to that one but removes the style from the first button

为了澄清,我永远不会编写任何xaml代码,根据是否切换PushButton来应用不同的样式。此图像中的两个PushButtons都使用相同的样式(绑定为StaticResource),但WPF似乎并不关心它。

发生了什么事?

1 个答案:

答案 0 :(得分:1)

没有看到你的XAML是不可能的,但这几乎肯定是你的视觉树。也就是说,WPF正在创建一个样式的实例(单例),因此只能在一个地方托管任何视觉效果。因此,应用该样式的最后一个控件“获胜”并获得该可视树的所有权。

要测试我的理论,您可以尝试在XAML资源上设置x:Shared="False"。但是,为了建议一个正确的解决方案,我需要看看你的XAML。