(一)在WPF中获得Windows 10或8的主题色

x

 Windows强调的颜色

因为Windows 8用户可以选择一个系统强调色。这种颜色可以在默认应用程序的窗口边框上看到,在UWP应用程序中使用它非常容易。

如何在WPF中获得强调颜色?

选项1:SystemParameters。

 

WindowGlassBrush -不是100%相同的颜色据我所知,有几种方法可以获得颜色代码,其中一种简单但不是100%正确的方法是使用SystemParameters。在。net 4.5中引入的WindowGlassBrush属性。遗憾的是,这个颜色不是100%正确的——我不知道在哪里使用了这个“类似的”,但不是相同的颜色,以及为什么API返回这个颜色。这似乎只是未文档化的DwmGetColorizationParameters Win32 API的一个包装器。

选项2:GetImmersiveColorFromColorSetEx

我在这里找到了这个解决方案,它只是围绕GetImmersiveColorFromColorSetEx Win32 API的一个包装器。

选项3:Registry, DwmGetColorizationParameters

最后一个选项是读取注册表值——我在这个站点上找到了一些提示,但我不建议使用它,因为它或多或少没有文档,将来可能会崩溃。我们用选项1或2。用法:两个选项的使用都非常简单(至少提供了选项2代码):

用法:

两个选项的使用都非常简单(至少提供了选项2代码):

    // https://gist.github.com/paulcbetts/3c6aedc9f0cd39a77c37
    var accentColor = new SolidColorBrush(AccentColorSet.ActiveSet["SystemAccent"]);
    this.Code.Background = accentColor;
    this.Code.Text = "AccentColorSet Immersive 'SystemAccent' " + accentColor.Color.ToString();

    // Available in .NET 4.5
    this.SystemProperties.Background = SystemParameters.WindowGlassBrush;
    this.SystemProperties.Text = "SystemParameters.WindowGlassBrush " + ((SolidColorBrush)SystemParameters.WindowGlassBrush).Color.ToString();
  
    //同样也可以通过Binding来设置主题色
    <TextBlock Height="50" x:Name="Code" Background="{x:Static SystemParameters.WindowGlassBrush}">Code</TextBlock>

 Result:

x

从评论中可以看出:正如Yves Goergen所指出的,生成的颜色并不完全匹配边框颜色,但是它确实匹配了系统的重音颜色,这是可以的。我猜边框有一些附加的chrome行为,所以颜色略有不同。

完整的代码在GitHub上希望这个有帮助。

原文地址

思考:这篇文章解决了获取Win10强调色的问题,但是,问题又来了,这个例子不能动态的改变主题色,当程序运行的过程中,主题色变了,WPF程序怎么跟随主题色同时变化。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值