关于Theme,我的理解是和ASP.NET主题中的CSS是一个意思,当然,Sl中的样式更加的强大。

第一种方式:

1,装完Silverlight Tookit之后,在C:\Program Files\Microsoft SDKs\Silverlight\v3.0\Toolkit\Jul09\Themes目录下面会有一些主题的dll,我们引用其中一个dll文件,以System.Windows.Controls.Theming.ShinyRed.dll为例

2,在XAML中添加对这个dll的引用

          xmlns:Red="clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.ShinyRed"

3,把这里的主题当成一个控件,那么需要使用这个主题的控件应该是其子控件

          <Red:ShinyRedTheme>
            <StackPanel x:Name="LayoutRoot"
                    Width="207"
                    Margin="35,39,158,81"
                    Height="180">
            <Button Content="Button"
                    Margin="10"></Button>
            <Button Content="Button"
                    Height="23"
                    Name="button1"
                    Width="75" />
            </StackPanel>
           </Red:ShinyRedTheme>

4,因为主题控件中只能包含一个子控件,所以这里使用了一个StackPanel作为容器

效果:         其已经覆盖了对根元素的Background设置的另一种颜色。

第2种方式:

1,选择一个主题文件,可以从C:\Program Files\Microsoft SDKs\Silverlight\v3.0\Toolkit\Jul09\Themes\Xaml目录下选择,这里将其复制到Themes文件中。

2,将文件添加进来之后,有一个地方是很关键的,就是将RainierOrange.xaml的BuildAction的属性由Page改为Content,如果不这么做的话,VS会爆出AG_E_PARSER_BAD_PROPERTY_VALUE这样的错误,同时需要添加主题文件中引用到的dll。

3添加System.Windows.Controls.Theming.Toolkit.dll,并在页面进行引用

xmlns:Theme="clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.Toolkit"

4,应用主题:

        <Grid Background="Black">
        <StackPanel x:Name="LayoutRoot" Width="248" Margin="100"
            Theme:ImplicitStyleManager.ApplyMode="Auto"
                    Theme:ImplicitStyleManager.ResourceDictionaryUri="Themes/RainierOrange.xaml"
                Height="382">
       <Button Content="Button" Margin="10" ></Button>
       </StackPanel>
       </Grid>

5,这里我们设置了背景为Blcak,看看效果:

     其实效果就跟第一种不一样了,它可以控制到应用主题的控件。

扩展:动态换主题

       主要就是Theme两种主题可以切换,因为只是模拟,所以UI上只放了一个ListBox用来选择不同的主题

       public void LoadTheme()
        {
            this.listBox1.Items.Add(new ComboBoxItem() { Content = "TwilightBlue", Name = "TwilightBlue", DataContext = "Themes/TwilightBlue.xaml", IsEnabled = true });
            this.listBox1.Items.Add(new ComboBoxItem() { Content = "RainierOrange", Name = "RainierOrange", DataContext = "Themes/RainierOrange.xaml",IsEnabled = true });
            this.listBox1.SelectionChanged +=
                (obj, e) =>
                {
                    if (e != null)
                    {
                        StackPanel stack = new StackPanel();
                        Button btn = new Button();
                        stack.Children.Add(btn);
                        this.LayoutRoot.Children.Clear();
                        this.LayoutRoot.Children.Add(stack);
                        Uri uri = new Uri((this.listBox1.SelectedItem as ComboBoxItem).DataContext.ToString(), UriKind.RelativeOrAbsolute);
                        ImplicitStyleManager.SetResourceDictionaryUri(stack, uri);
                        ImplicitStyleManager.SetApplyMode(stack, ImplicitStylesApplyMode.Auto);
                        ImplicitStyleManager.Apply(stack);
                    }
                };
        }

有一个地方需要注意的就是对于Themes下的xaml文件BuildAction不能为Page类型,否则会出现无法找到对应资源的错误

转自:http://www.cnblogs.com/626498301/archive/2010/08/13/1799008.html

Silverlight中的主题设置的更多相关文章

  1. Silverlight 中图片路径的设置

    在Silverlight中图片的设置方法有几种 如上图在一个工程中有个images文件夹,buttons.xaml页面中的Image控件要引用一张图片 第一种方法 xaml: <Image x: ...

  2. Silverlight中文本框添加回车事件后,换行无法清除的解决方法

    在开发Silverlight的项目中,为了更好的用户体验,我们常要给一些控件添加一些快捷键.然而,在Silverlight中当用户回车提交后,光标停留在文本框的第二行怎么也清除不掉,经过一段时间研究, ...

  3. ArcGIS API for Silverlight中加载Google地形图(瓦片图)

    原文:ArcGIS API for Silverlight中加载Google地形图(瓦片图) 在做水利.气象.土地等行业中,若能使用到Google的地形图那是再合适不过了,下面就介绍如何在ArcGIS ...

  4. Silverlight中动画的性能浅析

    Silverlight中提供了StoryBoard实现动画,可是StoryBoard的性能实在不敢恭维,特别是动画很大的时候,计算机的CPU和内存的狂增,如此一来性能实在太差,在默认的动画效果中动画实 ...

  5. aspx利用cookie值来停止silverlight中的计时器

    一.silverlight与silverlight中可以利用委托(delegate)来刷新frame.Refresh() 1.在子类中定义委托捕捉关闭事件按钮 public delegate void ...

  6. Silverlight中在MVVM模式下对DatagridRow选择控件封装

    在项目中,凡是涉及到表格的地方用的最多的控件,自然少不了DataGrid的身影,它明了的展示各种数据让人十分喜欢.现在要实现一个功能,使DataGrid具有全选和项选中的功能,如果在传统后台代码中完成 ...

  7. Silverlight中的拖拽实现的图片上传

    原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...

  8. Silverlight中的Path

    原文:Silverlight中的Path 在Silverlight中Path可能由直线.曲线.或者其他简单的图形对象组成.这篇文章旨在介绍如何使用XAML和C#来创建Path. 废话先行 Path可能 ...

  9. WPF/Silverlight中的RichTextBox总结

    WPF/Silverlight中的RichTextBox总结   在WPF或者是在Silverlight中有个非常强大的可以编辑的容器控件RichTextBox,有的时间会采取该控件来作为编辑控件.鉴 ...

随机推荐

  1. [Java] 匿名内部类

    package test.file; import java.io.File; import java.io.FilenameFilter; /** * 匿名的内部类 * @author Frost. ...

  2. java异常分类(运行时异常,可检查异常)

    NullPointerException:是运行时异常(RuntimeException),也叫非检查异常 所以我们抛出该类异常实例时,方法声明处无需添加throws来列举该类异常的抛出,编译器在编译 ...

  3. jQuery formValidator表单验证插件常见问题

    1.    如何实现一个控件,根据不同的情况,实现不同的控制? 2.    一个页面上我有几个tab页,如何实现每个Tab页上的控件单独校验? 3.    我采用的页面上文字问题的方式,点提交的时候, ...

  4. Dubbo 应用容器

    Dubbo的容器模块,是一个独立的容器,因为服务通常不需要Tomcat/JBoss等Web容器的特性,没必要用Web容器去加载服务. 服务容器只是一个简单的Main方法,并加载一个简单的Spring容 ...

  5. Cannot merge new index 67361 into a non-jumbo instruction

    升级Android ADT 后项目出现如题错误. https://groups.google.com/forum/?fromgroups=#!topic/adt-dev/tuLXN9GkVas jus ...

  6. 深度解析EM菌

    现在,在各大水族论坛里知道什么是EM菌的人不多,能正确说出EM菌的原理.成分和用途的人更是凤毛麟角,很多人对EM菌是否适用于水族箱存有疑虑,他们认为EM菌里大部分都是厌氧菌,因此不适合在水族箱这种好氧 ...

  7. [VB.NET]拖动操作的技术基础

    1.设置需要接受拖动事件的控件的AllowDrop属性为True,在开发界面时配置,不可通过代码配置 2.在DragEnter事件处理程序里,为e.Effet设置枚举值,否则拖动无效 Private ...

  8. Android——TabWidget

    1.activity_tabwidget.xml <?xml version="1.0" encoding="utf-8"?><TabHost ...

  9. Open XML SDK 在线编程黑客松

    2015年2月10日-3月20日,开源社 成员 微软开放技术,GitCafe,极客学院联合举办" Open XML SDK 在线编程黑客松 ",为专注于开发提高生产力的应用及服务的 ...

  10. TchApp项目说明

    概述 使用Web做UI,csharp编程,构建跨平台桌面软件,项目目标是打造一个框架,做完相关的基础设施,让使用者能够只关注业务开发,而不需要重新构建基础设施. 项目应该包括:窗口管理API,跨语言( ...