彩票走势图

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

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

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

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  折腾了半天,终于解决绝了运行时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;
      &nbsp;  ;      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();
   &nbsp; 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&quot; HorizontalAlignment=

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

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

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

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

5、最终效果图

 

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


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP