wpf换肤
需求: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)
[最优解释]
比较通用的方法是利用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>
public Window1()
{
InitializeComponent();
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"DefaultSkin.xaml", UriKind.Relative);
Application.Current.Resources = rd;
}
private void bgRed_Click(object sender, RoutedEventArgs e)
{
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"RedSkin.xaml", UriKind.Relative);
Application.Current.Resources = rd;
}