WPF 列表选择,动态调用ResourceDictionary内资源
来源:互联网 发布:源码查看 编辑:程序博客网 时间:2024/05/01 05:57
做WPF项目经常会碰到让客户从列表中选择样式,选定后,动态更改部件的样式。下面以动态更改一个控件的背景图为例子来说说实现的方法。
如果大家有更好的方法,欢迎在评论中提出来。
控件的背景图使用Microsoft Expression Design 4 设计的,使用Express Design的很大一个好处,就是不需要使用图片(减少软件的体积),而且
可以把设计的内容直接添加到ResourceDictionary里使用。在Express Design设计好的部件,按右键选择导出,格式选择:XAML Silverlight 4/WPF Canvas 即可。
导出后,去掉不必要的内容:各个Layer的名称等等,就可以放在资源文件内使用了。
在里面添加从Express Design里设计好的内容:(这里以三个不同颜色的形状为例)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<VisualBrush TileMode="None" x:Key="Style1">
<VisualBrush.Visual>
<Viewbox Width="1920" Height="1080">
<Canvas Width="600.039" Height="599.879">
<Path Width="145.609" Height="144.765" Canvas.Left="-7.62939e-005" Canvas.Top="-4.57764e-005" Stretch="Fill" Fill="#FFFFC800" Data="F1 M -7.62939e-005,72.3784C -7.62939e-005,112.359 32.5887,144.765 72.8046,144.765L 72.8046,144.765C 113.012,144.765 145.609,112.359 145.609,72.3784L 145.609,72.3784C 145.609,32.3979 113.012,-4.57764e-005 72.8046,-4.57764e-005L 72.8046,-4.57764e-005C 32.5887,-4.57764e-005 -7.62939e-005,32.3979 -7.62939e-005,72.3784 Z "/>
</Canvas>
</Viewbox>
</VisualBrush.Visual>
</VisualBrush>
<VisualBrush TileMode="None" x:Key="Style2">
<VisualBrush.Visual>
<Viewbox Width="1920" Height="1080">
<Canvas Width="600.13" Height="599.878">
<Rectangle Width="122.776" Height="123.495" Canvas.Left="6.10352e-005" Canvas.Top="4.57764e-005" Stretch="Fill" Fill="#FF0096FF"/>
</Canvas>
</Viewbox>
</VisualBrush.Visual>
</VisualBrush>
<VisualBrush TileMode="None" x:Key="Style3">
<VisualBrush.Visual>
<Viewbox Width="1920" Height="1080">
<Canvas Width="600.13" Height="599.878">
<Rectangle Width="122.776" Height="123.495" Canvas.Left="6.10352e-005" Canvas.Top="4.57764e-005" Stretch="Fill" Fill="#FF009664"/>
</Canvas>
</Viewbox>
</VisualBrush.Visual>
</VisualBrush>
</ResourceDictionary>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles\VisualStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
首先定义一个要绑定的数据类型:
public class WinStyles
{
public string StyleName { get; set; }//资源文件内的Key的名称
public VisualBrush BackgroundBrush { get; set; }//把资源文件内的VisualBrush刷到控件上
}
在主窗体XAML里添加一个ComboBox,代码如下:
<ComboBox Grid.Row="1" x:Name="WinStyleList" Width="341" Height="114" ItemsSource="{Binding}" SelectionChanged="WinStyleList_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<Border CornerRadius="2,2,2,2" Margin="2" Background="{Binding BackgroundBrush}" Width="310" Height="100">
<TextBlock Text="{Binding StyleName}" Foreground="{Binding Fontcolor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
可以看到,资源的VisualBrush会作为Border的Background呈现。
在窗体内实现以下代码:
private void iniStyleList()
{
List<WinStyles> _winstyles = new List<WinStyles>();
WinStyles st1 = new WinStyles();
st1.StyleName = "Style1";
st1.Fontcolor = new SolidColorBrush(Colors.White);
st1.BackgroundBrush = (VisualBrush)this.FindResource("Style1");
_winstyles.Add(st1);
WinStyles st2 = new WinStyles();
st2.StyleName = "Style2";
st2.Fontcolor = new SolidColorBrush(Colors.White);
st2.BackgroundBrush = (VisualBrush)this.FindResource("Style2");
_winstyles.Add(st2);
WinStyles st3 = new WinStyles();
st3.StyleName = "Style3";
st3.Fontcolor = new SolidColorBrush(Colors.Black);
st3.BackgroundBrush = (VisualBrush)this.FindResource("Style3");
_winstyles.Add(st3);
//绑定到comboBox
WinStyleList.ItemsSource = _winstyles;
WinStyleList.SelectedIndex = 0;
private void WinStyleList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
WinStyles winStyle = (WinStyles)this.WinStyleList.SelectedItem;
this.DisplayStyle.Background = (VisualBrush)this.FindResource(winStyle.StyleName);
}
本文源码下载:
http://download.csdn.net/detail/soft2buy/6713683
如果大家有更好的方法,欢迎在评论中提出来。
控件的背景图使用Microsoft Expression Design 4 设计的,使用Express Design的很大一个好处,就是不需要使用图片(减少软件的体积),而且
可以把设计的内容直接添加到ResourceDictionary里使用。在Express Design设计好的部件,按右键选择导出,格式选择:XAML Silverlight 4/WPF Canvas 即可。
导出后,去掉不必要的内容:各个Layer的名称等等,就可以放在资源文件内使用了。
本范例实现步骤如下:
在里面添加从Express Design里设计好的内容:(这里以三个不同颜色的形状为例)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<VisualBrush TileMode="None" x:Key="Style1">
<VisualBrush.Visual>
<Viewbox Width="1920" Height="1080">
<Canvas Width="600.039" Height="599.879">
<Path Width="145.609" Height="144.765" Canvas.Left="-7.62939e-005" Canvas.Top="-4.57764e-005" Stretch="Fill" Fill="#FFFFC800" Data="F1 M -7.62939e-005,72.3784C -7.62939e-005,112.359 32.5887,144.765 72.8046,144.765L 72.8046,144.765C 113.012,144.765 145.609,112.359 145.609,72.3784L 145.609,72.3784C 145.609,32.3979 113.012,-4.57764e-005 72.8046,-4.57764e-005L 72.8046,-4.57764e-005C 32.5887,-4.57764e-005 -7.62939e-005,32.3979 -7.62939e-005,72.3784 Z "/>
</Canvas>
</Viewbox>
</VisualBrush.Visual>
</VisualBrush>
<VisualBrush TileMode="None" x:Key="Style2">
<VisualBrush.Visual>
<Viewbox Width="1920" Height="1080">
<Canvas Width="600.13" Height="599.878">
<Rectangle Width="122.776" Height="123.495" Canvas.Left="6.10352e-005" Canvas.Top="4.57764e-005" Stretch="Fill" Fill="#FF0096FF"/>
</Canvas>
</Viewbox>
</VisualBrush.Visual>
</VisualBrush>
<VisualBrush TileMode="None" x:Key="Style3">
<VisualBrush.Visual>
<Viewbox Width="1920" Height="1080">
<Canvas Width="600.13" Height="599.878">
<Rectangle Width="122.776" Height="123.495" Canvas.Left="6.10352e-005" Canvas.Top="4.57764e-005" Stretch="Fill" Fill="#FF009664"/>
</Canvas>
</Viewbox>
</VisualBrush.Visual>
</VisualBrush>
</ResourceDictionary>
注意最好放在Viewbox里,可以保证随窗体大小的变化而改变大小。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles\VisualStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
首先定义一个要绑定的数据类型:
public class WinStyles
{
public string StyleName { get; set; }//资源文件内的Key的名称
public VisualBrush BackgroundBrush { get; set; }//把资源文件内的VisualBrush刷到控件上
}
在主窗体XAML里添加一个ComboBox,代码如下:
<ComboBox Grid.Row="1" x:Name="WinStyleList" Width="341" Height="114" ItemsSource="{Binding}" SelectionChanged="WinStyleList_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<Border CornerRadius="2,2,2,2" Margin="2" Background="{Binding BackgroundBrush}" Width="310" Height="100">
<TextBlock Text="{Binding StyleName}" Foreground="{Binding Fontcolor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
可以看到,资源的VisualBrush会作为Border的Background呈现。
在窗体内实现以下代码:
private void iniStyleList()
{
List<WinStyles> _winstyles = new List<WinStyles>();
WinStyles st1 = new WinStyles();
st1.StyleName = "Style1";
st1.Fontcolor = new SolidColorBrush(Colors.White);
st1.BackgroundBrush = (VisualBrush)this.FindResource("Style1");
_winstyles.Add(st1);
WinStyles st2 = new WinStyles();
st2.StyleName = "Style2";
st2.Fontcolor = new SolidColorBrush(Colors.White);
st2.BackgroundBrush = (VisualBrush)this.FindResource("Style2");
_winstyles.Add(st2);
WinStyles st3 = new WinStyles();
st3.StyleName = "Style3";
st3.Fontcolor = new SolidColorBrush(Colors.Black);
st3.BackgroundBrush = (VisualBrush)this.FindResource("Style3");
_winstyles.Add(st3);
//绑定到comboBox
WinStyleList.ItemsSource = _winstyles;
WinStyleList.SelectedIndex = 0;
}
private void WinStyleList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
WinStyles winStyle = (WinStyles)this.WinStyleList.SelectedItem;
this.DisplayStyle.Background = (VisualBrush)this.FindResource(winStyle.StyleName);
}
这是在猪八戒网上请人(金蕾品牌设计)用Express Design设计的资源文件,在ComboBox上罗列出来效果很好。
本文源码下载:
http://download.csdn.net/detail/soft2buy/6713683
1 0
- WPF 列表选择,动态调用ResourceDictionary内资源
- 动态加载资源文件(ResourceDictionary)
- ResourceDictionary.MergedDictionaries 属性wpf
- WPF使用ResourceDictionary
- 内嵌资源调用
- select 动态列表选择
- 定义和使用字典资源(ResourceDictionary)
- WPF中的静态资源和动态资源
- WPF在资源内嵌入字体
- sliverlight 资源动态调用
- WPF中的资源(一) - 静态资源和动态资源
- WPF学习 之 资源文件调用
- UWP入门(六)-- ResourceDictionary 和 XAML 资源引用
- [WPF]静态资源(StaticResource)和动态资源(DynamicResource)
- wpf动态资源和静态资源的区别
- 动态库调用对话框资源
- WPF后台动态调用样式文件
- 圣殿骑士WPF企业内训资源下载
- 字符串中最后一个单词的长度 Length of Last Word
- 自定义进度按钮
- android自定义控件--横向滑动的ListView
- 编程网站
- android:屏幕自适应
- WPF 列表选择,动态调用ResourceDictionary内资源
- 如何在GitHub上下载自己喜欢的开源代码并提交修改
- 山东理工大学ACM平台题答案关于C语言 1259 Bad Hair Day
- 正则表达式
- springmvc文件上传错误
- 基于Matlab手选控制点的非同源图像简单配准
- 黑马程序员——java之正则表达式
- BufferedOutputStream和ByteArrayOutputStream区别
- 客户端存储