WPF 列表选择,动态调用ResourceDictionary内资源

做WPF项目经常会碰到让客户从列表中选择样式,选定后,动态更改部件的样式。下面以动态更改一个控件的背景图为例子来说说实现的方法。
如果大家有更好的方法,欢迎在评论中提出来。


控件的背景图使用Microsoft Expression Design 4 设计的,使用Express Design的很大一个好处,就是不需要使用图片(减少软件的体积),而且
可以把设计的内容直接添加到ResourceDictionary里使用。在Express Design设计好的部件,按右键选择导出,格式选择:XAML Silverlight 4/WPF Canvas 即可。
导出后,去掉不必要的内容:各个Layer的名称等等,就可以放在资源文件内使用了。


本范例实现步骤如下:


1.新建一个WPF工程,添加一个ResourceDictionary文件,命名为:VisualStyles.xaml
   在里面添加从Express Design里设计好的内容:(这里以三个不同颜色的形状为例)
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
   
       
           
               
                   
               

           

       

   

   
       
           
               
                   
               

           

       

   

   
       
           
               
                   
               

           

       

   


注意最好放在Viewbox里,可以保证随窗体大小的变化而改变大小。


2.在App.xaml里引用这个资源文件
   
       
           
                               
           

       

   


3. 将资源文件的内容绑定到一个ComboBox,供客户选择:
    首先定义一个要绑定的数据类型:
    public class WinStyles
    {
        public string StyleName { get; set; }//资源文件内的Key的名称
        public VisualBrush BackgroundBrush { get; set; }//把资源文件内的VisualBrush刷到控件上        
    }
   在主窗体XAML里添加一个ComboBox,代码如下:
   
           
               
                   
                       
                   

               

           

       

   可以看到,资源的VisualBrush会作为Border的Background呈现。
   在窗体内实现以下代码:
   private void iniStyleList()
        {
            List _winstyles = new List();
            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;

        }


4. 当用户在ComboBox做出选择时,把资源的VisualBrush显示在主控件上。
      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上罗列出来效果很好。


WPF 列表选择,动态调用ResourceDictionary内资源_第1张图片



本文源码下载:
http://download.csdn.net/detail/soft2buy/6713683

你可能感兴趣的:(WPF)