积极答复者
动态创建样式,动态生成style

问题
-
项目中碰到一个问题 ,现在需要动态生成 style 而不是在xaml 文件中写死的,那就是要new style 实现类似以下的xaml代码
<Style x:Key="TransitionPageStyle" TargetType="phone:PhoneApplicationPage"> <Setter Property="toolkit:TransitionService.NavigationInTransition"> <Setter.Value> <toolkit:NavigationInTransition> <toolkit:NavigationInTransition.Backward> <toolkit:TurnstileTransition Mode="BackwardIn"/> </toolkit:NavigationInTransition.Backward> <toolkit:NavigationInTransition.Forward> <toolkit:TurnstileTransition Mode="ForwardIn"/> </toolkit:NavigationInTransition.Forward> </toolkit:NavigationInTransition> </Setter.Value> </Setter> <Setter Property="toolkit:TransitionService.NavigationOutTransition"> <Setter.Value> <toolkit:NavigationOutTransition> <toolkit:NavigationOutTransition.Backward> <toolkit:TurnstileTransition Mode="BackwardOut"/> </toolkit:NavigationOutTransition.Backward> <toolkit:NavigationOutTransition.Forward> <toolkit:TurnstileTransition Mode="ForwardOut"/> </toolkit:NavigationOutTransition.Forward> </toolkit:NavigationOutTransition> </Setter.Value> </Setter> </Style>
我是这么写的public static Style getStyle() { Style style = new Style(); style.TargetType = typeof(System.Windows.Controls.Page); var na1 = new NavigationInTransition( ); var tu1 = new TurnstileTransition() ; var tu2 = new TurnstileTransition(); tu1.Mode = TurnstileTransitionMode.BackwardIn; tu2.Mode = TurnstileTransitionMode.ForwardIn; na1.SetValue(NavigationInTransition.BackwardProperty, tu1); na1.SetValue(NavigationInTransition.BackwardProperty, tu2); style.Setters.Add(new Setter(TransitionService.NavigationInTransitionProperty ,na1 )); var na2 = new NavigationInTransition(); var tu3 = new TurnstileTransition(); var tu4 = new TurnstileTransition(); tu3.Mode = TurnstileTransitionMode.BackwardOut; tu4.Mode = TurnstileTransitionMode.ForwardOut; var w = na2.GetValue(NavigationInTransition.BackwardProperty); na2.SetValue(NavigationInTransition.BackwardProperty, tu3); na2.SetValue(NavigationInTransition.BackwardProperty, tu4); style.Setters.Add(new Setter(TransitionService.NavigationInTransitionProperty, na2)); System.Diagnostics.Debug.WriteLine(style.ToString()); return style; }
但是没有效果 ,请问哪里错误?如果错了应该这么写?
答案
-
原理上是这么写,为style添加一个key,然后尝试应用该style。
- 已编辑 oak_silver 2012年2月13日 4:08
- 已标记为答案 Haixia_XieModerator 2012年2月16日 8:24
全部回复
-
你好,
如果你的目的是想通过后台代码动态改变style,可以使用类似于以下的方式来实现:
var dictionaries = Resources.MergedDictionaries; dictionaries.Clear(); var themeStyles = new ResourceDictionary { Source = new Uri(customTheme, UriKind.Relative) }; dictionaries.Add(themeStyles);
http://www.cnblogs.com/jeekun/archive/2011/08/06/2129433.html
http://www.cnblogs.com/kiminozo/archive/2012/01/26/2329863.html
-
原理上是这么写,为style添加一个key,然后尝试应用该style。
- 已编辑 oak_silver 2012年2月13日 4:08
- 已标记为答案 Haixia_XieModerator 2012年2月16日 8:24