码迷,mamicode.com
首页 > 其他好文 > 详细

如何在.cs中统一动态修改xaml中style资源定义的样式

时间:2015-05-03 17:34:44      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:windows phone 8.1   动态修改控件元素样式   在.cs中动态修改样式元素属性   修改style定义的资源里面的属性   

关于设置控件属性样式的方法已经在之前的博客中有提及过,博客地址:设置控件样式的方法


当然在实际项目编写过程中,不光单纯的需要设置元素样式,有时候需要动态的修改元素的样式,这个时候就有些不

同了。需要针对不同的情形来选择不同的方法修改样式。


情形一:单纯的修改一个控件元素的样式,那么只要在.cs中仅仅针对这个控件的样式属性的修改即可。

情形二:如果是要针对同一类的所有控件的样式进行相同的属性修改,比如针对页面中所有的Label控件进行修改,

那么对应之前你在给这些Label控件设置样式的不同做法,如下:

1.一个一个的Label控件单独设置。

2.针对Label编写统一的style样式资源(Style x:key="style" target="Label"...),

3.设置一个Style资源,然后给每个Label引用这个资源

(Style x:key="labelStyle"...)(Labelstyle="{StaticResource labelStyle}")

而会有相应的修改方案,如下:


(以下的操作是 基于要修改Label的Background属性样式的假设)

针对情形二中的第1种情况,没啥说的,虽说是最笨的方法,但是最实在。

针对情形二中的第2种情况,可以这样做:(要依照上面定义的Style的key值)

Style style = this.Resources["style"] as Style;

// 找到Background的Setter

SetterBase sb = style.Setters.Where(s => ((Setter)s).Property ==

Label.BackgroundProperty).FirstOrDefault();

int index = style1.Setters.IndexOf(sb);

// 为Setter赋新值

style.Setters[index] = new Setter(Label.BackgroundProperty, new SolidColorBrush(Colors.Red));


针对情形二中的第3种情况,可以这样做:

你需要要新建一个Style对象进行修改,然后再把这个Style对象赋值给Label的Style属性:

Style style = this.Resources["labelStyle"] as Style;

Style newStyle = new Style(typeof(Label)) { BasedOn = style };

// 添加一个新的Setter,设置Background为Red

newStyle.Setters.Add(new Setter(Label.BackgroundProperty, new SolidColorBrush(Colors.Red)));

// 将新Style对象赋值给页面中需要修改的所有Label的Style属性

label1.Style = newStyle;

label2.Style = newStyle;............

如何在.cs中统一动态修改xaml中style资源定义的样式

标签:windows phone 8.1   动态修改控件元素样式   在.cs中动态修改样式元素属性   修改style定义的资源里面的属性   

原文地址:http://blog.csdn.net/u010792238/article/details/45458985

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!