【问题标题】:How to detect the current theme in WPF's Xaml?如何检测 WPF 的 Xaml 中的当前主题?
【发布时间】:2009-08-05 07:33:49
【问题描述】:

我有一个自定义控件,在 XP 或 Vista 上运行 Aero 主题时需要稍作调整,是否有一种简单的方法来检测主题(操作系统检测还不够,因为用户可以更改主题)和在样式触发器中使用它?

我需要在 Vista 上应用一个小的边距更改以获得所需的外观:

        <Setter Property="Margin"
                Value="0,-1,0,-1" />

上述设置器当前是无条件的(例如不在触发器中),但需要我有两个版本。

理想情况下,解决方案应该只是 Xaml,但如有必要,我可以公开一个属性以与 DataTrigger 关联。

【问题讨论】:

    标签: wpf xaml themes


    【解决方案1】:

    您可以编写一个 ValueConverter 来获取边距设置并在其 Convert 方法中进行平台/主题检查。

    【讨论】:

    • 我曾考虑过这一点,但我认为它将设计器逻辑移动到后端,同时检测 Xaml 中的主题(或将其投影到那里)让 Xaml 负责视觉外观。
    • @Sean :转换器对绑定很有用,但在这种情况下没有绑定。标记扩展可能更合适。 @Ray:转换器或标记扩展不是“后端”......它们只是使您的前端工作的样板代码。如果你总是在 XAML 中做所有事情,你将不会取得太多成就 ;)
    • @Thomas,我知道我无法通过 XAML 完成所有工作,但我希望后面的代码能够公开一般信息,而不是对演示做出决定。重读@Sean 的回答后,我似乎错过了他的部分观点(拍了拍额头)。我最终实际上做的是公开一个通用设置 MVVM,其中包含一个“CurrentTheme”属性,因此允许我检测“Luna”或“Aero”主题。
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 2011-04-24
    • 1970-01-01
    • 2013-08-19
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多