Windows Phone 8.1中怎么重载系统默认资源

Windows Phone 8.1中怎么重载系统默认资源

Windows Phone 8.1中如何重载系统默认资源

在应用设计过程中,我们总是设计好应用各块的布局和颜色的分配。当然这只是我们的一厢情愿,当我们真正开始

CD的时候,这才发现预想总是很美好的,实际操作起来确实有些难度。当然对于经验老道的程序员来说,这点阻碍

并不算什么。

正如题目所说,微软已经给我们设置了各种各样的系统默认资源,特别在是对于控件的一些属性,有的时候我们可以

直接定义属性来覆盖掉,而有的时候我们定义了属性依然毫无作用,这个时候我们就需要重载它的默认主题值。


好了,上面废话一大堆,下面就让我们来看看到底有多少默认的主题资源:

这里以ProgressBar为例,因为对于这个控件,你一厢情愿的设置它的foreground和background值好像并不起作

用,它还是它,并不会那么乖就听你的命令。

首先在ProgressBar的设置选项卡中调出Foreground属性,点击它的设定选项,然后你会看到它提供给你多种设置的

方法,这里我们将鼠标移到系统资源上面。

Windows Phone 8.1中怎么重载系统默认资源

Windows Phone 8.1中怎么重载系统默认资源

你会发现会跳出很多很多的系统定义资源,上下滚动查看,乖乖,确实是蛮多的。所以说在今后如果不知道系统资源

定义的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颜色(前景色)是和你的手机设置的主题色是一致的,而对于很多其他的控件,很多问题都是出在这个

手机主题色上面的。所以我们的手机主题色就是默认的主题色了,而因为每个人用手机的习惯不一样,所以为了应用

的统一性,这才需要我们自行设置。

具体如下截图所示:

Windows Phone 8.1中怎么重载系统默认资源               Windows Phone 8.1中怎么重载系统默认资源


2.上面对于样式资源的申明和绑定设置,只是其中的一种方法,还有其他很多种方法,这次博客中的样式属性设置是

对之前一篇博客的补充。

之前一篇博客: win8,win8.1应用中生成显示button和button背景图片的三,四种方法以及改变元素样式的四种方法


3.这里我没有设置ProgressBar的Background,一来大家可以具体自行尝试,举一反三;二来我认为毫无必要,因为

它本身应该是透明的,如果非要设置的话就会突出那一块颜色,毫无美感而言。