如何在运行时修改Telerik控件的主题

转帖|其它|编辑:郝浩|2011-04-20 10:39:14.000|阅读 1883 次

概述:折腾了半天,终于解决绝了运行时Telerik Controls在运行时修改主题的问题。

  折腾了半天,终于解决绝了运行时Telerik Controls在运行时修改主题的问题。

  1、首先建立StyleViewModel类,继承INotifyPropertyChanged以实现双向绑定;

    public sealed class StyleViewModel : INotifyPropertyChanged
     {
        private Theme selectedTheme;
        private readonly IEnumerable<Theme> themesSource = 

ThemeManager.StandardThemes.Select(a => a.Value);
 
       public Theme SelectedTheme
       {
            get {
               return this.selectedTheme ?? this.themesSource.First();
           }
          set {
             this.selectedTheme = value;
               this.PropertyChanged

(this, new PropertyChangedEventArgs("SelectedTheme"));
         }
    }
 
      public IEnumerable<Theme> ThemesSource
     {
          get { return this.themesSource; }
       }
 
   public event PropertyChangedEventHandler PropertyChanged;
   }

2、修改App.xaml.cs

新建方法ResetRootVisual,用来重新绘制根节点

  private void ResetRootVisual()
    {
       var rootVisual = Application.Current.RootVisual as Grid;
          rootVisual.Children.Clear();
        rootVisual.Children.Add(new MainPage());
       }

修改Application_Startup,创建StyleViewModel对象,并响应PropertyChanged事件

     private void Application_Startup(object sender, StartupEventArgs e)
   {
    this.customeStyle = new StyleViewModel();
     this.customeStyle.PropertyChanged +=

 new System.ComponentModel.PropertyChangedEventHandler

(customeStyle_PropertyChanged);

    this.RootVisual = new Grid();
   this.ResetRootVisual();
    }

   void customeStyle_PropertyChanged(object sender, 

System.ComponentModel.PropertyChangedEventArgs e)
    {
  StyleManager.ApplicationTheme = this.customeStyle.SelectedTheme;
     this.ResetRootVisual();
    }

新增GetCustomeStyle方法用于获取customeStyle

  public StyleViewModel GetCustomeStyle()
  {
    return this.customeStyle;
  }

 3、创建界面控件

创建两个CmoboBox控件并对他们的SelectedItem进行双向绑定,方便查看双向绑定是否成功

  <telerik:RadComboBox HorizontalAlignment=

"Left" Margin="37,30,0,0" Name="radComboBox1"

 VerticalAlignment="Top" Width="250" 
     ItemsSource="{Binding ThemesSource, Mode=OneTime}" SelectedItem="{Binding SelectedTheme, Mode=TwoWay}">
  </telerik:RadComboBox>
  <telerik:RadComboBox HorizontalAlignment=

"Left" Margin="316,30,0,0" Name=

"radComboBox2" VerticalAlignment="Top" Width="250" 
    ItemsSource="{Binding ThemesSource, Mode=OneTime}" SelectedItem="{Binding SelectedTheme, Mode=TwoWay}" >
  </telerik:RadComboBox>
<sdk:Label Height="28" HorizontalAlignment=

"Left" Margin="59,69,0,0" Name="label2" VerticalAlignment="Top"

 Width="120" Content="{Binding SelectedTheme, Mode=OneWay}"  />

 4、修改MainPage.xaml.cs,绑定DataContext

  public MainPage()
  {
  InitializeComponent();
           
  DataContext = (Application.Current as App).GetCustomeStyle();
}

5、最终效果图

 

  总结:这个方法的缺点在于每次更改样式主题后都会重置用户界面为初始界面,不能保存用户的当前状态



标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果

文章转载自:网络转载

登录 慧都网发表评论


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
在线
客服
在线
QQ
电话
咨询
400-700-1020
购物车 反馈 返回
顶部
在线客服系统
live chat