本教程将向您介绍如何让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 应用以及动态切换主题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)