码迷,mamicode.com
首页 > 其他好文 > 详细

WPF 中动态改变控件模板

时间:2014-08-08 23:42:36      阅读:410      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   io   文件   2014   

在某些项目中,可能需要动态的改变控件的模板,例如软件中可以选择不同的主题,在不同的主题下软件界面、控件的样式都会有所不同,这时即可通过改变控件模板的方式实现期望的功能。
基本方法是当用户点击切换主题按钮是加载新的资源字典,并使用新加载的资源字典替代当前的资源字典这时要用到ResourceManager。
假设现有两个不同的资源字典文件Dictionary1.xaml和Dictionary2.xaml存在于Themes文件夹内:
bubuko.com,布布扣
在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[0] = 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[0] = newDictionary;
        }

bubuko.com,布布扣bubuko.com,布布扣

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

WPF 中动态改变控件模板,布布扣,bubuko.com

WPF 中动态改变控件模板

标签:style   blog   http   color   使用   io   文件   2014   

原文地址:http://www.cnblogs.com/infly123/p/3900213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!