zoukankan      html  css  js  c++  java
  • WPF 中动态改变控件模板

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

    如果不想让控件应用默认样式,可以手动设置控件的样式为null:
    <Button Content="主题1" Style="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
    另一种方法:直接修改所用控件的样式、模板,但这时要保证控件的样式或模板引用为DynamicResource而非StaticResource。
  • 相关阅读:
    服务器文档下载zip格式
    关于精度,模运算和高精的问题//19/07/14
    Luogu P2010 回文日期 // 暴力
    树形DP水题集合 6/18
    普通背包水题集合 2019/6/17
    因为时间少
    重学树状数组6/14(P3368 【模板】树状数组 2)
    Luogu P1291 [SHOI2002]百事世界杯之旅 // 易错的期望
    Luogu P4316 绿豆蛙的归宿//期望
    树剖
  • 原文地址:https://www.cnblogs.com/infly123/p/3900213.html
Copyright © 2011-2022 走看看