使用Silverlight Toolkit中的主题(Theme)

      在Silverlight Tookit 中提供了大约十种主题,大家可以根据自己的喜好,很容易就在项目中实现
动态换肤效果。当然其官方还推荐了几个制作主题的插件,使用这些 Blend插件可以很方便的生成各
格颜色的主题。

      好了,下面开始今天的正文。
    
     首先我们要下载该Tookit并将其中的相应DLL文件:Microsoft.Windows.Controls.Theming.dll加
到当前的示例中,另外就是相关的theme文件了,我已将10种主题文件放在了这个DEMO的themes
文件夹下:

       

        并以“内容”方式作为"生成操作"的选项,如下:

     

        我们可以直接在XAML文件中声明使用主题的元素,比如:

<UserControl ..
xmlns:theming
="clr-namespace:Microsoft.Windows.Controls.Theming;assembly=Microsoft.Windows.Controls.Theming"
>
    
<!--ShinyDarkPurple-->
<StackPanel Width="100"
  theming:ImplicitStyleManager.ApplyMode
="Auto"   
  theming:ImplicitStyleManager.ResourceDictionaryUri
="themes/ExpressionLight.xaml">
        
<Button Content="Button"/>
        
<CheckBox Content="CheckBox"/>
        
<RadioButton Content="RadioButton"/>
        
<Slider/>
        
<ListBox/>
        
<ProgressBar Height="15" Value="30"/>
        
<controls:Expander ExpandDirection="Down"/>
    
</StackPanel>
<!--ShinyDarkGreen-->
</UserControl>

    
    这样在该StackPanel下的所有控件样式均应用了ExpressionLight主题。另外我们也可以在CS
文件中对指定的控件设置相应的主题,比如本DEMO中所写的代码:

public Page()
{
    InitializeComponent();
    
this.ThemeList.SelectionChanged += new SelectionChangedEventHandler(ThemeList_SelectionChanged);
    
this.Loaded += new RoutedEventHandler(Page_Loaded);
}

void Page_Loaded(object sender, RoutedEventArgs e)
{
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "ExpressionDark", Content = "ExpressionDark", DataContext = "themes/ExpressionDark.xaml", IsEnabled = true });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "ExpressionLight", Content = "ExpressionLight", DataContext = "themes/ExpressionLight.xaml" });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "RainierOrange", Content = "RainierOrange", DataContext = "themes/RainierOrange.xaml" });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "RainierPurple", Content = "RainierPurple", DataContext = "themes/RainierPurple.xaml" });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "RainierRadialBlue", Content = "RainierRadialBlue", DataContext = "themes/RainierRadialBlue.xaml" });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "ShinyBlue", Content = "ShinyBlue", DataContext = "themes/ShinyBlue.xaml" });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "ShinyDarkGreen", Content = "ShinyDarkGreen", DataContext = "themes/ShinyDarkGreen.xaml" });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "ShinyDarkPurple", Content = "ShinyDarkPurple", DataContext = "themes/ShinyDarkPurple.xaml" });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "ShinyDarkTeal", Content = "ShinyDarkTeal", DataContext = "themes/ShinyDarkTeal.xaml" });
    ThemeList.Items.Add(
new ComboBoxItem() { Name = "ShinyRed", Content = "ShinyRed", DataContext = "themes/ShinyRed.xaml" });

    SetTheme(ThemeList.Items[
0as ComboBoxItem);
}

private void ThemeList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    SetTheme(ThemeList.SelectedItem 
as ComboBoxItem);
}

//设置相应的theme
void SetTheme(ComboBoxItem comboBoxItem)
{
    
if (comboBoxItem != null)
    {
        ControlPage control 
= new ControlPage();
        Test.Children.Clear();
        Test.Children.Add(control);

        Uri uri 
= new Uri(comboBoxItem.DataContext.ToString(), UriKind.Relative);
        ImplicitStyleManager.SetResourceDictionaryUri(control, uri);
        ImplicitStyleManager.SetApplyMode(control, ImplicitStylesApplyMode.Auto);
        ImplicitStyleManager.Apply(control);
    }
}

 

     上面代码中的ControlPage 类即是我们要加载的控件页对象,在该对象上声明了一些控件,然后将这些控
件(集合)做为子控件加载到当前PAGE页面中的Stack元素(Test)中。这样我们运行一下这个DEMO,看一下
各个主题的显示效果:

     
        
      
 
             

    
        
      
   
    
             
      

    
              
   
    
        
      
    
    
        
  
    
        
  
    
        
      
 
  

   

     当然,官方还推荐了几个主题制作插件工具,比如: Kuler,以及插件Colorful Expression。
可以从这个链接中获得一些信息:)  
   

     好了,今天的内容就先到这里了,源码下载,请点击这里
   
     原文链接:http://www.cnblogs.com/daizhj/archive/2009/01/19/1378090.html

     作者: daizhj, 代震军

     Tags: silverlight,theme, toolkit, 风格

     网址: http://daizhj.cnblogs.com/
   
     在微软的Silverlight 开源控件项目: Silverlight Toolkit

posted @ 2009-02-23 09:33  代震军  阅读(13280)  评论(23编辑  收藏  举报