使用Silverlight Toolkit 应用以及动态切换主题

使用Silverlight Toolkit 应用以及动态切换主题,第1张

概述本教程将向您介绍如何让Silverlight应用程序应用主题,并允许用户动态切换。 (原文:http://weblogs.asp.net/lduveau/archive/2010/05/31/dynamically-apply-and-change-theme-with-the-silverlight-toolkit.aspx) 简介 从Silverlight支持主题开始就能实现,但2010年4月

本教程将向您介绍如何让Silverlight应用程序应用主题,并允许用户动态切换。
(原文:http://weblogs.asp.net/lduveau/archive/2010/05/31/dynamically-apply-and-change-theme-with-the-silverlight-toolkit.aspx)

简介

从Silverlight支持主题开始就能实现,但2010年4月以后的版本和Silverlight 4中的新特性,使得应用这些主题更加容易。

您需要知道:

ImplicitStyleManager从工具箱中被删除了,这是因为现在在Silverlight 4已经支持隐式样式。 该工具包包含一个主题控件,可以应用页面的主题控制。 另外ContextMenuService 和ContextMenu 控件可以允许用户在应用程序运行时进行主题切换。

截至2010年4月从工具包中可用的主题:

 

 

You Could easily create your own,the XAML files used by those themes can be found on your local folder after installing the toolkit,for the April 2010 version the path is:这些主题所使用的XAML文件,您可以轻松地创建的,安装工具包后在您的本地文件夹可以找到,2010年4月版本的路径是:

C:\Program files\Microsoft SDKs\Silverlight\v4.0\Toolkit\Apr10\themes\Xaml

入门

如果没有它,安装最新版本的Silverlight工具包:
http://silverlight.codeplex.com/http://silverlight.codeplex.com/

 

然后打开Visual Studio 2010,创建新的Silverlight导航应用程序(或Silverlight商业应用程序)。

添加Toolkit主题DLL

右键单击Silverlight项目,选择“添加引用...”,然后选择NET选项卡中所有System.windows.Controls.Toolkit .*的DLL。

 

主题控件

安装该工具包后,VS工具箱中会有一个主题控件,在MainPage.xaml页面Frame外面添加一个主题控件,在这里,只想将主题应用到页面的内容部分。然后设置themeUri属性为其中引用的样式

 

<toolkit:theme x:name="themeContainer" themeUri="/System.windows.Controls.Theming.BubbleCreme;component/theme.xaml"><toolkit:ContextMenuService.ContextMenu>    <toolkit:ContextMenu>        <toolkit:MenuItem header="theme" IsEnabled="False"/>        <toolkit:Separator />                    <toolkit:MenuItem header="Default" />                    <toolkit:MenuItem header="Bubble Creme"                            Command="{StaticResource themeCommand}"                            CommandParameter="BubbleCreme"/>        <toolkit:MenuItem header="Bureau Black"                            Command="{StaticResource themeCommand}"                            CommandParameter="BureauBlack"/>        <toolkit:MenuItem header="Bureau Blue"                            Command="{StaticResource themeCommand}"                            CommandParameter="BureauBlue"/>        <toolkit:MenuItem header="Expression Dark"                            Command="{StaticResource themeCommand}"                            CommandParameter="ExpressionDark"/>        <toolkit:MenuItem header="Expression light"                            Command="{StaticResource themeCommand}"                            CommandParameter="Expressionlight"/>        <toolkit:MenuItem header="RainIEr Orange"                            Command="{StaticResource themeCommand}"                            CommandParameter="RainIErOrange"/>        <toolkit:MenuItem header="RainIEr Purple"                            Command="{StaticResource themeCommand}"                            CommandParameter="RainIErPurple"/>        <toolkit:MenuItem header="Shiny Blue"                            Command="{StaticResource themeCommand}"                            CommandParameter="ShinyBlue"/>        <toolkit:MenuItem header="Shiny Red"                            Command="{StaticResource themeCommand}"                            CommandParameter="ShinyRed"/>        <toolkit:MenuItem header="Whistler Blue"                            Command="{StaticResource themeCommand}"                            CommandParameter="WhistlerBlue"/>    </toolkit:ContextMenu></toolkit:ContextMenuService.ContextMenu>


 

如果你从工具箱拖放主题控件,Visual Studio会自动添加“工具包”的命名空间前缀,如果没有,需要在页面标题中手动添加:xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"

在Home Page(/VIEws/Home.xaml)添加几个控件(TextBox,button,Calendar,…),并在浏览器中测试您的应用程序,您应该看到在内容部分应用的主题:

这就是,很容易。

现在让我们为用户添加从列表中选择一个主题的功能。

添加一个上下文菜单列出可用的主题

在主题控件内的ContextMenuService添加一个ContextMenu控件(在运行时右键会出现):

<toolkit:ContextMenuService.ContextMenu>    <toolkit:ContextMenu>        <toolkit:MenuItem header="theme" IsEnabled="False"/>        <toolkit:Separator />                    <toolkit:MenuItem header="Default" />                    <toolkit:MenuItem header="Bubble Creme"                            Command="{StaticResource themeCommand}"                            CommandParameter="BubbleCreme"/>        <toolkit:MenuItem header="Bureau Black"                            Command="{StaticResource themeCommand}"                            CommandParameter="BureauBlack"/>        <toolkit:MenuItem header="Bureau Blue"                            Command="{StaticResource themeCommand}"                            CommandParameter="BureauBlue"/>        <toolkit:MenuItem header="Expression Dark"                            Command="{StaticResource themeCommand}"                            CommandParameter="ExpressionDark"/>        <toolkit:MenuItem header="Expression light"                            Command="{StaticResource themeCommand}"                            CommandParameter="Expressionlight"/>        <toolkit:MenuItem header="RainIEr Orange"                            Command="{StaticResource themeCommand}"                            CommandParameter="RainIErOrange"/>        <toolkit:MenuItem header="RainIEr Purple"                            Command="{StaticResource themeCommand}"                            CommandParameter="RainIErPurple"/>        <toolkit:MenuItem header="Shiny Blue"                            Command="{StaticResource themeCommand}"                            CommandParameter="ShinyBlue"/>        <toolkit:MenuItem header="Shiny Red"                            Command="{StaticResource themeCommand}"                            CommandParameter="ShinyRed"/>        <toolkit:MenuItem header="Whistler Blue"                            Command="{StaticResource themeCommand}"                            CommandParameter="WhistlerBlue"/>    </toolkit:ContextMenu></toolkit:ContextMenuService.ContextMenu>

您需要添加一个引用这个DLL:System.windows.input.ToolkitSystem.windows.input.Toolkit 

所以,现在你的页面的结构应该是:

请注意,每个MenuItem被映射到一个命令,并且主题名称作为参数传递。

你必须创建一个新类,并实现ICommand接口。这里的目标是获得一个主题控件的引用(按名称,但您可能会找到更好的办法做到这一点),并设置其themeUri属性。

 

using System;using System.Net;using System.windows;using System.windows.Controls;using System.windows.documents;using System.windows.Ink;using System.windows.input;using System.windows.Media;using System.windows.Media.Animation;using System.windows.Shapes;using System.windows.Markup;using System.IO;using System.windows.Controls.Theming;namespace FunWiththemes{    public class themeChangeCommand : ICommand    {        #region ICommand Members        public bool CanExecute(object parameter)        {            return true;        }        public event EventHandler CanExecuteChanged;        public voID Execute(object parameter)        {            theme themeContainer = (theme)((FrameworkElement)Application.Current.RootVisual).Findname("themeContainer");            string themename = parameter as string;            if (themename == null)            {                themeContainer.themeUri = null;            }            else             {                themeContainer.themeUri = new Uri("/System.windows.Controls.Theming." + themename + ";component/theme.xaml",UriKind.relativeOrabsolute);            }            if (CanExecuteChanged != null)                CanExecuteChanged(this,new EventArgs());        }        #endregion    }}


 

如果使用“Silverlight的商业应用程序”模板,你应该改变类似

 theme themeContainer = (theme)((FrameworkElement)((ContentControl)Application.Current.RootVisual).Content).Findname( @H_46_301@"themeContainer" ); 在MainPage.xaml中(或在应用程序资源)的资源中添加命令:
 < GrID.Resources > 
     < local:themeChangeCommand x:Key ="themeCommand" />
 </ GrID.Resources > 

"local"是应用程序的命名空间前缀

测试!

现在,当您运行测试页,你可以用鼠标右键单击并选择一个主题:

选择主题“Shiny Red”:

或 “Bureau Blue”:

您有多种存储策略(独立存储,服务器配置文件,甚至cookies,... ...)

总结

以上是内存溢出为你收集整理的使用Silverlight Toolkit 应用以及动态切换主题全部内容,希望文章能够帮你解决使用Silverlight Toolkit 应用以及动态切换主题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1074286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存