Silverlight主题

 

Silverlight主题

注:本文使用的IDE是vs.net 2010 Professional SP1;Silverlight版本为5;Silverlight Toolkit使用的是Silverlight_5_Toolkit_September_2011.msi安装包。从http://silverlight.codeplex.com/可以获得Silverlight Toolkit的安装文件。通过下面的链接能够访问Silverlight_4_Toolkit的演示页面:http://silverlight.net/content/samples/sl4/toolkitcontrolsamples/run/default.html

 

1.    Silverlight ToolKit

1.1简介

Silverlight Toolkit是由微软提供的一系列的Silverlight控件、组件和工具的集合,不仅免费且完全开源。效果预览:

如果需要使用Silverlight ToolKit则首先登录官方Silverlight ToolKit官方网站: http://silverlight.codeplex.com,下载安装包,完成安装。最新安装包如下所示:

  

1.2 使用

如果需要在工程中使用Silverlight ToolKit,则首先需要添加相关的引用,工具箱中会显示ToolKit包含的控件以及主题元素,以使用BureauBlue为例:

Ø  新建工程,添加System.Windows.Controls.ToolKit

System.Windows.Controls.Theming.ToolKi System.Windows.Controls.Theming.BureauBlue等DLL


 

Ø  设计界面添加BureauBlueTheme控件

注意:这个标签中只能包含一个子元素,所以我们需要将要应用主题的元素放在一个布局元素内(例如StackPanel),再将这个布局元素放入上述标签内,这样就能应用主题效果了,效果如下所示:

 

代码如下:


 

2.    ResourceDictionary

通过ResourceDictionary我们可以导入已经用xaml文件写好的主题。

Ø  首先在Silverlight程序中建立一个文件夹叫“Assets”,在这个文件夹内包含我们使用的主题文件,如下图所示:

Ø  在App.xaml文件中引入我们的主题文件,代码如下:

               <Application.Resources>

                    <ResourceDictionary>

                        <ResourceDictionary.MergedDictionaries>

                          <ResourceDictionary Source="Assets/Styles.xaml"/>

                          <ResourceDictionary Source="Assets/CoreStyles.xaml"/>

                          <ResourceDictionary Source="Assets/SDKStyles.xaml"/>

                         <ResourceDictionary Source="Assets/ToolkitStyles.xaml"/>

                        </ResourceDictionary.MergedDictionaries>

                  </ResourceDictionary>

               </Application.Resources>

注意:如果程序中没有使用SDK控件或Toolkit控件,SDKStyles.xaml和ToolkitStyles.xaml就不用引入了。引入文件后在编译程序时会报,找不到控件的错误,这是由于我们的程序没有添加对这些命名空间的引用,我们添加引用后,就能编译通过了。或者把报错的文件从项目中移除。这样,我们的程序中的所有控件就会变成对应主题的样式。这种主题的使用方式不像Toolkit那样,必须包含在对应的标签内才能生效。但Toolkit可以在同一个程序中使用多种主题。示例如下所示:

 

3.    动态切换解决方案

所有主题类都从Theme类派生(继承关系如下图所示),因此可以通过改变Theme类的ThemeUri来动态切换不同的主题。

示例使用一个ComboBox来选择主题,具体界面设计如下:

Ø  首先定义主题选择项,用来确定主题显示的名称以及主题XAML的URI,类定义如下:


 

Ø  其次当UserControl加载时初始化ComboBox,代码如下:

         private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            List<ThemeSelectItem> themes = new List<ThemeSelectItem>()
            {
                new ThemeSelectItem("默认", null),
                new ThemeSelectItem("BureauBlack", "/System.Windows.Controls.Theming.BureauBlack;component/Theme.xaml"),
                new ThemeSelectItem("BureauBlue", "/System.Windows.Controls.Theming.BureauBlue;component/Theme.xaml"),
                new ThemeSelectItem("RainierOrange", "/System.Windows.Controls.Theming.RainierOrange;component/Theme.xaml"),
                new ThemeSelectItem("TwilightBlue", "/System.Windows.Controls.Theming.TwilightBlue;component/Theme.xaml"),
            };
            comboBox1.ItemsSource = themes;
            comboBox1.SelectedIndex = 0;
        }

Ø  最后添加ComboBox的SelectionChange事件,动态切换主题,代码如下:

        //更换主题
        private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ThemeSelectItem selected = comboBox1.SelectedItem as ThemeSelectItem;
            if (null != selected)
            {
                Theme theme = this.Content as Theme;
                if (null != theme)
                {
                    theme.ThemeUri = selected.ThemeUri;
                }
            }
        }

l  运行效果如下:

TwilightBlue主题

 


 

RainierOrange主题

 

注意:以上示例需要添加相关的引用(如下图所示),否则会出现编译出错

以上就是对Silverlight主题使用的一个小小的总结,希望能提供一些帮助。

 

猜你喜欢

转载自blog.csdn.net/zlpstudy/article/details/6955052