栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

WPF换肤设计原理浅析

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WPF换肤设计原理浅析

WPF换肤的设计原理,利用资源字典为每种皮肤资源添加不同的样式,在后台切换皮肤资源文件。

截图


上图中,第一张图采用规则样式,第二张图采用不规则样式,截图的时候略有瑕疵。

资源字典

规则样式资源Skin.RegularStyle.xaml



 
 
  
   
    
     
      

 
 
 

      
      
     
    
   
  
 

 
 
  
  
  
   
    
     
      

 
 
 

      
      
     
     
      

 
  
   
   
  
 


      
     
    
   
  
 

 
 
  
  
  
   
    
     
      
     
    
   
  
 

 
 
  
   
    
     
      
     
    
   
  
 

 
 
  
   
    
     
      
     
     
      


      
     
    
   
  
 

 
 
  
  
 


不规则样式资源Skin.RoundedCornerStyle.xaml


 
 
  
   
    
     
      

 

      
      

 
  
  
  
 


      
     
    
   
  
 
 
 
 
  
  
  
   
    
     
      
      

 
 
 

      
     
     
      

 
  
   
   
  
 


      
     
    
   
  
 

 
 
  
  
  
   
    
     
      
     
    
   
  
 

 
 
  
   
    
     
      
     
    
   
  
 

 
 
  
   
    
     
      
     
     
      


      
     
    
   
  
 
 
 
 
  
  
 


仔细观察上面定义的样式,你会发现在定义Window样式的时候指定了Key,其他的Control样式却没有指定Key。大家都知道,如果没有给Style指定Key,那么这个Style会应用到所有目标类型(TargetType)为指定类型的Control。请看下面一段文字:

因为在换肤的过程中,需要动态加载Window的样式,所以用DynamicResource作绑定Style="{DynamicResource WindowStyle}"。

App.xaml

程序运行的时候,默认加载规则样式的皮肤。


  
   
    
   
  
 

后台代码

/// 
  /// MenuItem的执行方法
  /// 
  /// 
  private void RelayMenuItemEvent(object parameter)
  {
   if (parameter.ToString() == RegularStyle)
   {
    ChangeSkinResource(Skins[0]);
   }
   else if (parameter.ToString() == RoundedCornerStyle)
   {
    ChangeSkinResource(Skins[1]);
   }
  }

  /// 
  /// 更换皮肤资源
  /// 
  /// 
  private void ChangeSkinResource(ResourceDictionary skin)
  {
   if (Application.Current.Resources.MergedDictionaries[0].Source.IsAbsoluteUri)
   {
    if (Application.Current.Resources.MergedDictionaries[0].Source.OriginalString != skin.Source.OriginalString)
    {
     Application.Current.Resources.MergedDictionaries[0] = skin;
    }
   }
   else
   {
    if (Application.Current.Resources.MergedDictionaries[0].Source.OriginalString.ToString('\') != skin.Source.OriginalString.ToString('/'))
    {
     Application.Current.Resources.MergedDictionaries[0] = skin;
    }
   }
  }

运行的时候在MainWindow上右键选择皮肤样式,就可以换肤了。

源码下载:http://xiazai.jb51.net/201610/yuanma/WPFSkin(jb51.net).rar

链接:stackoverflow

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/123972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号