在应用设计过程中,我们总是设计好应用各块的布局和颜色的分配。当然这只是我们的一厢情愿,当我们真正开始
CD的时候,这才发现预想总是很美好的,实际操作起来确实有些难度。当然对于经验老道的程序员来说,这点阻碍
并不算什么。
正如题目所说,微软已经给我们设置了各种各样的系统默认资源,特别在是对于控件的一些属性,有的时候我们可以
直接定义属性来覆盖掉,而有的时候我们定义了属性依然毫无作用,这个时候我们就需要重载它的默认主题值。
好了,上面废话一大堆,下面就让我们来看看到底有多少默认的主题资源:
这里以ProgressBar为例,因为对于这个控件,你一厢情愿的设置它的foreground和background值好像并不起作
用,它还是它,并不会那么乖就听你的命令。
首先在ProgressBar的设置选项卡中调出Foreground属性,点击它的设定选项,然后你会看到它提供给你多种设置的
方法,这里我们将鼠标移到系统资源上面。
你会发现会跳出很多很多的系统定义资源,上下滚动查看,乖乖,确实是蛮多的。所以说在今后如果不知道系统资源
定义的key值,你就可以这么做。
知道了系统默认资源以及如何查看,那么接下来就要重载它了。这里依旧是拿ProgressBar控件为例。
我要把ProgressBar的Foreground设置成Green,而这边我要重载的系统默认主题资源是
ProgressBarIndeterminateForegroundThemeBrush这个系统资源。当然如果你不知道具体是哪个,对于这个控件的
系统默认资源定义并不多,你可以一个一个试试,不行就去MSDN查一下具体是哪个也行。
步骤一:
在项目中新建一个资源字典,重载主题资源,如下:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:RedefineProgressBarColor"> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <x:String x:Key="ProgressBarIndeterminateForegroundThemeBrush">Green</x:String> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary>
步骤二:
然后在App.xaml中包含这个资源字典,如下:
<Application x:Class="RedefineProgressBarColor.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:RedefineProgressBarColor"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="RedefineDictionary.xaml"></ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
步骤三:
在页面拖进来一个ProgressBar控件,运行一下就能发现它的Foreground变成了你设置的Green,而原来你如果不重
载这个系统资源属性,那么Foreground默认值就不一定是Green了。而如果你不重载,只是重复设置它的Foreground
值,那么它不会理会你,依然显示系统默认的资源属性。
以上就是本次博客的主要内容。这里要补充三点:
1.对于上述说法,有些人可能有一些疑问,你说系统默认主题的颜色到底是什么呢。很好,这个问题要这么
看,Foreground颜色(前景色)是和你的手机设置的主题色是一致的,而对于很多其他的控件,很多问题都是出在这个
手机主题色上面的。所以我们的手机主题色就是默认的主题色了,而因为每个人用手机的习惯不一样,所以为了应用
的统一性,这才需要我们自行设置。
具体如下截图所示:
2.上面对于样式资源的申明和绑定设置,只是其中的一种方法,还有其他很多种方法,这次博客中的样式属性设置是
对之前一篇博客的补充。
之前一篇博客:win8,win8.1应用中生成显示button和button背景图片的三,四种方法以及改变元素样式的四种方法
3.这里我没有设置ProgressBar的Background,一来大家可以具体自行尝试,举一反三;二来我认为毫无必要,因为
它本身应该是透明的,如果非要设置的话就会突出那一块颜色,毫无美感而言。