首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将颜色定义为WPF中主题内的系统颜色。

将颜色定义为WPF中主题内的系统颜色。
EN

Stack Overflow用户
提问于 2013-05-04 20:56:15
回答 1查看 1.4K关注 0票数 1

我希望将SolidColorBrush定义为WPF应用程序中的资源(或者更确切地说,在几个应用程序可能引用的程序集中)。

在某些主题中,我希望在构成主题的资源字典中显式地定义这个颜色,但例如,在经典主题中,我希望这个颜色是一个系统颜色。

例如:

Aero.NormalColor.xaml

代码语言:javascript
复制
   <SolidColorBrush 
      x:Key="{ComponentResourceKey 
         TypeInTargetAssembly={x:Type l:MyClass},
         ResourceId=MyColor}" 
         Color="#FF3399FF"/>

Classic.xaml:

代码语言:javascript
复制
   <SolidColorBrush 
      x:Key="{ComponentResourceKey 
         TypeInTargetAssembly={x:Type l:MyClass},
         ResourceId=MyColor}" 
         Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"/>

然后,我的应用程序应该可以使用此画笔的名称MyColor,以便可以在主题级别上重新定义它。如果如上所述,当颜色被定义为文字(即使用Aero主题时)时,一切都会正常工作,但是当引用SystemColors动态资源(在Classic.xaml中)时,我会得到一个异常,在应用程序启动期间,它会说“这个可冻结的不能冻结”。(至少如果我定义了几个这样的画笔,它似乎可以在某些场景中工作,比如只使用一种颜色,但它看起来并不很稳定。

编辑:的用法是这样的:

代码语言:javascript
复制
<Border Background="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type l:MyClass}, ResourceId=MyColor}}">

它似乎并不是全部都很容易复制。当我刚刚创建了一个具有两种颜色的主题文件,并在Grid中创建了一个带有上面一行的空窗口时,程序运行,但是Visual中的设计器却抛出了上面的异常。不太确定如何在运行时创建一个最小的示例来复制这个示例。

那么,我如何才能防止这个错误的发生,或者我应该使用什么方法来实现我的目标呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-07 20:06:27

你真的需要与系统颜色的动态链接吗?你试过设置静态资源了吗?我是说改变

代码语言:javascript
复制
Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}

代码语言:javascript
复制
Color="{StaticResource {x:Static SystemColors.HighlightColorKey}}

说得通吗?

似乎是设计出来的:http://www.vistax64.com/avalon/263-freezable-can-not-frozen-dynamicresource-x-static-systemcolors-controldarkdarkcolorkey.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16378885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档