在某些项目中,可能需要动态的改变控件的模板,例如软件中可以选择不同的主题,在不同的主题下软件界面、控件的样式都会有所不同,这时即可通过改变控件模板的方式实现期望的功能。
基本方法是当用户点击切换主题按钮是加载新的资源字典,并使用新加载的资源字典替代当前的资源字典这时要用到ResourceManager。
假设现有两个不同的资源字典文件Dictionary1.xaml和Dictionary2.xaml存在于Themes文件夹内:
在MainPage中使用其中一个资源字典作为默认样式文件:
  <Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes\Dictionary1.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
后台即可通过如下代码切换资源字典:
    private void Button_Click_1(object sender, RoutedEventArgs e)
{
ResourceDictionary newDictionary = new ResourceDictionary();
newDictionary.Source = new Uri("Themes/Dictionary1.xaml", UriKind.RelativeOrAbsolute);
this.Resources.MergedDictionaries[] = newDictionary;
} private void Button_Click_2(object sender, RoutedEventArgs e)
{
ResourceDictionary newDictionary = new ResourceDictionary();
newDictionary.Source = new Uri("Themes/Dictionary2.xaml", UriKind.RelativeOrAbsolute);
this.Resources.MergedDictionaries[] = newDictionary;
}

如果不想让控件应用默认样式,可以手动设置控件的样式为null:
<Button Content="主题1" Style="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
另一种方法:直接修改所用控件的样式、模板,但这时要保证控件的样式或模板引用为DynamicResource而非StaticResource。

WPF 中动态改变控件模板的更多相关文章

  1. WPF中动态改变控件显示位置

    转自 http://blog.csdn.net/lassewang/article/details/6928897 测试环境: Windows XP/Windows 7 开发环境: Microsoft ...

  2. WPF中的ControlTemplate(控件模板)(转)

    原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板)     ...

  3. WPF中的ControlTemplate(控件模板)

    原文:WPF中的ControlTemplate(控件模板) WPF中的ControlTemplate(控件模板)                                             ...

  4. [转]WPF中的ControlTemplate(控件模板)

    WPF中的ControlTemplate(控件模板)                                                                           ...

  5. Android中动态改变控件的大小的一种方法

    在Android中有时候我们需要动态改变控件的大小.有几种办法可以实现  一是在onMeasure中修改尺寸,二是在onLayout中修改位置和尺寸.这个是可以进行位置修改的,onMeasure不行. ...

  6. WPF基础篇之控件模板(ControlTemplate)

    WPF中每一个控件都有一个默认的模板,该模板描述了控件的外观以及外观对外界刺激所做出的反应.我们可以自定义一个模板来替换掉控件的默认模板以便打造个性化的控件. 与Style不同,Style只能改变控件 ...

  7. 在WPF中使用WinForm控件方法

    1.      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll. 2.      在要使用WinForm控 ...

  8. [转]在WPF中使用WinForm控件方法

    本文转自:http://blog.csdn.net/lianchangshuai/article/details/6415241 下面以在Wpf中添加ZedGraph(用于创建任意数据的二维线型.条型 ...

  9. VC中动态添加控件

    VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...

随机推荐

  1. Windows Phone 8.1不完全体验报告

    在Build 2014中,微软倾心打造的Windows Phone 8.1终于粉墨登场,会场掌声不断.在大会结束后一周,经过漫长的等待,终于等到了开发者预览的推送,迫不及待地体验这一跨时代的移动系统. ...

  2. ESP-IDF3.0

    发行版v3.0的文档可在http://esp-idf.readthedocs.io/en/v3.0/上找到. 这是自发布v3.0-rc1以来的更改列表. 如果从以前的稳定版本V2.1进行升级,请检查v ...

  3. hdu 4939 三色塔防

    http://acm.hdu.edu.cn/showproblem.php?pid=4939 给出一条长为n个单位长度的直线,每通过一个单位长度需要 t 秒. 有3种塔,红塔可以在当前格子每秒造成 x ...

  4. spring中的两个数据库事务DataSourceTransactionManager 和 JtaTransactionManager区别

    在spring与数据框架(mybatis或hibernate)容器的配置文件中通常会有 <!-- (事务管理)transaction manager, use JtaTransactionMan ...

  5. 分形之谢尔宾斯基(Sierpinski)四面体

    前面讲了谢尔宾斯基三角形,这一节的将对二维三角形扩展到三维,变成四面体.即将一个正四面体不停地拆分,每个正四面体可以拆分成四个小号的正四面体.由二维转变到三维实现起来麻烦了许多.三维的谢尔宾斯基四面体 ...

  6. StringBuffer 详解 (String系列之3)

    本章介绍StringBuffer以及它的API的详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string03.html StringBu ...

  7. Android---------------Activity的学习

    一.Activity的启动方式 1.显示启动     Intent intent=new Intent(MainActivity.this,SettingActivity.class); //还可以这 ...

  8. python 数据类型一 (重点是字符串的各种操作)

    一.python基本数据类型 1,int,整数,主要用来进行数学运算 2,bool,布尔类型,判断真假,True,False 3,str,字符串,可以保存少量数据并进行相应的操作(未来使用频率最高的一 ...

  9. POI读写海量Excel

    目前处理Excel的开源javaAPI主要有两种,一是Jxl(JavaExcel API),Jxl只支持Excel2003以下的版本.另外一种是Apache的Jakarta POI,相比于Jxl,PO ...

  10. Linux Shell命令行快捷键

    1. 命令行编辑 <Ctrl>+a 移动光标到行首 <Ctrl>+e ..........行尾 <Alt>+f 光标右移一个词 <Alt>+b .... ...