wpf换肤

wucaihua2008 2009-07-07 06:17:59
需求:WPF中,点界面中的按钮 ,变化界面背景图片.

我把背景图片bg_red.JPG,bg_blue.JPG,放在两个单独的资源文件中:RedSkin.xaml和BlueSkin.xaml

RedSkin.xaml内容:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- 应该在此定义资源字典条目。-->
<ImageBrush x:Key="bgBlue" Stretch="Fill" ImageSource="Images/bg_red.JPG" />
</ResourceDictionary>

BlueSkin.xaml内容:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- 应该在此定义资源字典条目。-->
<ImageBrush x:Key="bgRed" Stretch="Fill" ImageSource="Images/bg_blue.JPG" />
</ResourceDictionary>


点击button事件中,怎么添加代码?.(点btnRedSkin,背景图变为bg_red.JPG;点btnBlueSkin,背景图变为bg_blue.JPG)



...全文
404 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shifubeizhuazoule 2012-07-23
  • 打赏
  • 举报
回复
但是在不同的xaml文件中,有不同的imagebrush。加载资源的时候总是报错!
firefs 2010-12-21
  • 打赏
  • 举报
回复
飘过 ===
p280382654 2010-04-19
  • 打赏
  • 举报
回复
欢迎加入WPF技术群108463896
zyntl 2009-07-08
  • 打赏
  • 举报
回复
比较通用的方法是利用WPF的DynamicResource。
做法如下:
比如你要改换当前Window的Background。
首先,你要在Window的xaml文件里面加上这句话
Background="{DynamicResource bg}",因为这里使用的Key值是bg,这要求你需要把所有Skin里面的
x:Key使用同样的字符串,比如你需要把RedSkin.xaml里面的bgBlue改为bg,把BlueSkin.xaml里面的bgRed改为bg;
其次,一般来说你需要为你的程序写一个默认的皮肤,比如写这样一个DefaultSkin.xaml,里面定义了一个黄色的画刷作为默认的皮肤,你也可以使用RedSkin、BlueSKin之一作为默认的皮肤
DefaultSkin.xaml代码如下:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush Color="Yellow" x:Key="bg"/>
</ResourceDictionary>

接着,你需要在程序开始的时候把默认的皮肤加载进去,这部分放在Window的构造函数里去做比较合适,代码如下:

public Window1()
{
InitializeComponent();
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"DefaultSkin.xaml", UriKind.Relative);
Application.Current.Resources = rd;
}

当你点击Button进行换成红色皮肤时代码如下(换成蓝色皮肤一样):

private void bgRed_Click(object sender, RoutedEventArgs e)
{
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"RedSkin.xaml", UriKind.Relative);
Application.Current.Resources = rd;
}


wucaihua2008 2009-07-08
  • 打赏
  • 举报
回复
感谢zyntl的热心回答.您提供的思路很清楚。谢谢。结贴

我昨晚问题自己也想到了解决办法,原理应该一样,代码稍为有区别,我是利用WPF的DynamicResource,在Click事件中,直接指定桌面背景=资源名,通过Application.Current.Resources[]。
LQknife 2009-07-07
  • 打赏
  • 举报
回复
还真没弄过 你搜搜看看有什么wpf的皮肤软件没
V68V6 2009-07-07
  • 打赏
  • 举报
回复
友情up
jf
kissyou886 2009-07-07
  • 打赏
  • 举报
回复
顶起,关注---

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧