WPF预设有Aero, Classic, Luna, Royale主题, WPF程序会根据Windows主题决定WPF程序所使用的控件风格, 而且当Windows主题不是Aero, Luna或Royale, 而是其他主题的话, WPF将会采用比较丑的Classic主题, 那我怎么让WPF程序使用指定的主题呢?

其实很简单, 下面实例如何设定为Aero主题:
在WPF项目中添加PresentationFramework.Aero.dll这个引用, 然后在程序的Resources中加入
    <Application.Resources>
        
<ResourceDictionary Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35;component/themes/aero.normalcolor.xaml" />
    
</Application.Resources>
这相当于把PresentationFramework.Aero程序集中的空间风格代码引用到当前程序中.
注意, 项目必须引用主题对应的Assembly, 比如PresentationFramework.Aero.dll, PresentationFramework.Royale.dll等等, 它们可以在"Program Files\Reference Assemblies\Microsoft\Framework\v3.0" 或者 GAC中找到.
上面的XAML代码也可以使用相应的C#代码代替, 比如在Application的Startup事件处理函数中加入代码:
    protected override void OnStartup(StartupEventArgs e)
    {
        
base.OnStartup(e);
        Uri aero 
= new Uri("/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35;component/themes/aero.normalcolor.xaml", UriKind.Relative);
        Resources.MergedDictionaries.Add(Application.LoadComponent(aero) 
as ResourceDictionary); 
    }
当然也可以在Window的Resources中加入这个ResourceDictionary, 那样就只会在这个Window中采用此主题.

要指定其他主题的方法也差不多, 也就是引用相关dll和添加Resources.
WPF中的Aero主题和Windows Vista里的Aero主题控件风格完全一样, 包括譬如MouseEnter时的动画效果, 下面是在启用了Luna Element 4 视觉效果的Windows 2003系统运行的使用了Aero主题的WPF程序截图:



但WPF里的Aero主题在非Windows Vista系统是没有玻璃效果的.. 那不是GDI就能做到的东西..
Posted on 2006-11-08 18:07 Adrian H. 阅读(860) 评论(6)  编辑 收藏 所属分类: WPF

Feedback

#1楼    回复  引用  查看    

2006-11-09 09:14 by stswordman      
很漂亮啊,
我winfx是beta2 6月版的.......
我这里找不到PresentationFramework.Aero.dll
楼主的winfx版本是多少阿?

#2楼 [楼主]   回复  引用  查看    

2006-11-09 12:38 by Dah      
我用的是正式版的.Net Framework 3.0
beta2应该也有的, PresentationFramework.Aero在GAC里已经安装了, 不会找不到吧?

#3楼    回复  引用  查看    

2006-11-09 14:46 by stswordman      
问了问几个同事,他们也都没有....
楼主能提供个下载程序吗?谢谢:)

#4楼 [楼主]   回复  引用  查看    

2006-11-09 16:32 by Dah      
安装一下最新的.Net Framework 3.0吧
如果还是找不到就把
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.Aero.dll复制到程序运行文件夹试试

#5楼    回复  引用  查看    

2006-11-09 16:46 by stswordman      
我的winfx版本最近不能升级...
谢谢楼主了:)

#6楼    回复  引用    

2007-04-01 17:37 by 在线信息空间 [未注册用户]
不错,很简单。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-08-29 23:57 编辑过
成果网帮您增加网站收入


相关链接: