【WP7】替换系统主题样式

这个问题弄了好久才搞定,现在分享出来

有时候我们需要对一些控件进行一些定制的操作,比如修改控件默认的颜色等,但是并不是所有的颜色都可以直接设置的,

下面以TextBox为例,演示如何修改一些系统内置的一些颜色

  TextBox 控件在编辑的时候默认的背景色为白色,有时候需要做一些透明的效果的时候,比如让TextBox的背景色始终都为透明,与面板的背景保持一致

  1、首先找到关于系统内置一些样式的资源文件  C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Design, 然后找到 ThemeResources.xaml System.Windows.xaml 两个文件,并添加到项目中,这两个文件中,定义了很多系统默认的一些样式属性,包括画笔、颜色、字体、粗细、字号、文本样式等等最基本的元素。当然,并不是所有的定义都在这里

  2、在App.xaml 文件中,添加资源文件到资源字典中 

        <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="System.Windows.xaml" />
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>

    然后在 System.Windows.xaml 文件中添加对 ThemeResources.xaml 资源的引用

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ThemeResources.xaml" />
        </ResourceDictionary.MergedDictionaries>

    这样就完成了对资源的引用,接下来是修改 ThemeResources.xaml 资源文件,打开 ThemeResources.xaml 文件,可以找到关于TextBox的一些定义,关于Windows Phone主题资源的定义,可以参考http://msdn.microsoft.com/zh-cn/library/ff769552%28v=vs.92%29.aspx

View Code
        <!-- TextBox colors -->

        <!-- 100 percent Black -->
        <Color x:Key="PhoneTextCaretColor">#FF000000</Color>

        <!-- 75 percent White -->
        <Color x:Key="PhoneTextBoxColor">#BFFFFFFF</Color>

        <!-- 100 percent Black -->
        <Color x:Key="PhoneTextBoxForegroundColor">#FF000000</Color>

        <!-- 100 percent White -->
        <Color x:Key="PhoneTextBoxEditBackgroundColor">#FFFFFFFF</Color>

        <!-- 100 percent White -->
        <Color x:Key="PhoneTextBoxEditBorderColor">#FFFFFFFF</Color>

        <!-- 47 percent percent Black -->
        <Color x:Key="PhoneTextBoxReadOnlyColor">#77000000</Color>

        <!-- 60 percent White -->
        <Color x:Key="PhoneSubtleColor">#99FFFFFF</Color>

        <!-- 100 percent White -->
        <Color x:Key="PhoneTextBoxSelectionForegroundColor">#FFFFFFFF</Color>

    修改相应的Color,这里修改TextBox的编辑时的背景色   <Color x:Key="PhoneTextBoxEditBackgroundColor">#FFFFFFFF</Color>   为

                                 <Color x:Key="PhoneTextBoxEditBackgroundColor">#00000000</Color>

    虽然添加了对资源的引用,但是发现,TextBox在编辑状态的背景颜色还是没有改变,任然是白色的(这是由于引用的资源与系统默认的重名了,所以还是引用的是系统的样式,这里把引用名字改成我们自己的,就会生效了)

    在 ThemeResources.xaml System.Windows.xaml 两个文件中找到所有

          PhoneTextBoxEditBackgroundBrushPhoneTextBoxEditBackgroundColor

      替换成 CustomTextBoxEditBackgroundBrushCustomTextBoxEditBackgroundColor    这样系统就不会替换成默认的样式了

    试一下效果吧,看TextBox控件在编辑时背景是不是变透明了,尝试一下其他颜色的修改吧

    

  

原文地址:https://www.cnblogs.com/bomo/p/2763985.html