这个问题弄了好久才搞定,现在分享出来
有时候我们需要对一些控件进行一些定制的操作,比如修改控件默认的颜色等,但是并不是所有的颜色都可以直接设置的,
下面以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
<!-- 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 两个文件中找到所有的
PhoneTextBoxEditBackgroundBrush 和 PhoneTextBoxEditBackgroundColor
替换成 CustomTextBoxEditBackgroundBrush 和 CustomTextBoxEditBackgroundColor 这样系统就不会替换成默认的样式了
试一下效果吧,看TextBox控件在编辑时背景是不是变透明了,尝试一下其他颜色的修改吧