【问题标题】:Using a style from a MergedDictionary multiple times多次使用 MergedDictionary 中的样式
【发布时间】:2013-05-12 17:02:01
【问题描述】:

我有与一年前here 发布的完全相同的问题,但是正如那边的评论所述,所谓的正确答案根本不起作用。

我的设置类似于原始问题中描述的设置:我有一个资源字典,其中包含两个 BitmapImages 和一个要应用于 PushButton 的样式,该按钮根据 IsChecked 属性上的触发器选择这些图像之一。

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

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

这里有两个屏幕截图,显示出了什么问题。起初,两个标记的 PushButtons 都没有应用样式,即使我在 xaml 文件中指定了同样多的内容(Style={StaticResource name})。

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

发生了什么事?

【问题讨论】:

    标签: c# wpf styles resourcedictionary


    【解决方案1】:

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

    要测试我的理论,您可以尝试在 XAML 资源上设置 x:Shared="False"。但是,要提出适当的修复建议,我需要查看您的 XAML。

    【讨论】:

    • 感谢您的评论。我如何发布 xaml 代码?当我尝试添加它时,它不会显示在预览中。
    • 确保缩进正确。有关降价的详细信息,请阅读编辑控件附近的帮助。
    • 感谢您的帮助。 x:Shared="False" 确实是罪魁祸首。
    • @Simon:从技术上讲,您只是在规避真正的问题。很有可能,您可以重构您的资源,以便可以共享它们,从而产生更好的性能。但是,就像我说的那样,除非我看到实际的 XAML(或您的场景的模拟再现),否则我无法提供指导。
    • 感谢您的持续建议。一旦我再次上班(可能在下周四左右),我将能够发布我的代码。如果您能抽出时间帮助我实施适当的解决方案,我会很高兴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多