WPF的ComboBox 数据模板自定义

WPF的ComboBox 有些时候不能满足用户需求,需要对数据内容和样式进行自定义,下面就简要介绍一下用数据模板(DataTemplate)的方式对ComboBox 内容进行定制:
原型设计如下:

步骤:
1、新建一个WPF应用程序WpfAppDemo(VS2012),并新建一个images文件夹(上传图片素材);
2、在主界面MainWindow.xaml文件中添加一个Label、ComboBox 和Button控件,如下图:

代码如下:

 1 <Window x:Class="WpfAppDemo.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="MainWindow" Height="350" Width="525">
 5     <Grid>
 6         <ComboBox x:Name="myColorComBox" HorizontalAlignment="Left" Margin="110,79,0,0" VerticalAlignment="Top" Width="309" Height="48"  >
 7             <!--ItemTemplate-->
 8             <ComboBox.ItemTemplate>
 9                 <!--DataTemplate开始-->
10                 <DataTemplate>
11                     <Grid>
12                         <Grid.ColumnDefinitions>
13                             <ColumnDefinition Width="36"/>
14                             <ColumnDefinition Width="100*"/>
15                         </Grid.ColumnDefinitions>
16                         <Grid.RowDefinitions>
17                             <RowDefinition Height="50*"/>
18                             <RowDefinition Height="50*"/>
19                         </Grid.RowDefinitions>
20                         <!--绑定数据对象Image属性-->
21                         <Image Source="{Binding Image}" Width="32" Height="32" Margin="3,3,3,3" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" />
22                         <!--绑定数据对象Name属性-->
23                         <TextBlock Text="{Binding Name}" FontSize="12"  Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left"  VerticalAlignment="Center"/>
24                         <!--绑定数据对象Desc属性-->
25                         <TextBlock Text="{Binding Desc}" FontSize="10" Grid.Row="1" Grid.Column="1"  HorizontalAlignment="Left"  VerticalAlignment="Center"/>
26                     </Grid>
27                 </DataTemplate>
28                 <!--DataTemplate结束-->
29             </ComboBox.ItemTemplate>
30         </ComboBox>
31         <Label Content="员工: " HorizontalAlignment="Left" Margin="66,92,0,0" VerticalAlignment="Top"/>
32         <Button Content="显示" HorizontalAlignment="Left" Margin="110,166,0,0" VerticalAlignment="Top" Width="75" Height="22" Click="Button_Click"/>
33
34     </Grid>
35
36 </Window>

3、在主界面MainWindow.xaml.cs文件中进行逻辑处理,代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Windows;
 7 using System.Windows.Controls;
 8 using System.Windows.Data;
 9 using System.Windows.Documents;
10 using System.Windows.Input;
11 using System.Windows.Media;
12 using System.Windows.Media.Imaging;
13 using System.Windows.Navigation;
14 using System.Windows.Shapes;
15
16
17 namespace WpfAppDemo
18 {
19     /// <summary>
20     /// MainWindow.xaml 的交互逻辑
21     /// </summary>
22     public partial class MainWindow : Window
23     {
24         public MainWindow()
25         {
26             InitializeComponent();
27             //初始化数据,并绑定
28             LodData();
29         }
30
31
32         private void LodData()
33         {
34             IList<empoyee> customList = new List<empoyee>();
35             //项目文件中新建一个images文件夹,并上传了001.png,002.png,003.png
36             customList.Add(new empoyee() { ID ="001", Name = "Jack" ,Image="images/001.png",Desc="this is good gay!"});
37             customList.Add(new empoyee() { ID = "002", Name = "Smith", Image = "images/002.png", Desc = "this is great gay!" });
38             customList.Add(new empoyee() { ID = "003", Name = "Json", Image = "images/003.png", Desc = "this is the bset gay!" });
39
40
41             this.myColorComBox.ItemsSource = customList;//数据源绑定
42             this.myColorComBox.SelectedValue = customList[1];//默认选择项
43
44         }
45
46
47         private void Button_Click(object sender, RoutedEventArgs e)
48         {
49             //显示选择的员工ID信息
50             MessageBox.Show((this.myColorComBox.SelectedItem as empoyee).ID);
51         }
52
53
54
55
56
57     }
58     //定义员工类
59     public class empoyee
60     {
61         public string ID { get; set; }
62         public string Name { get; set; }
63         public string Image { get; set; }
64         public string Desc { get; set; }
65
66     }
67 }

4、编译运行,如果运气不错的话,应该能看到如下的界面:

时间: 2024-10-15 21:25:18

WPF的ComboBox 数据模板自定义的相关文章

WPF中的数据模板(DataTemplate)(转)

原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/30/694388.html WPF中的数据模板(DataTemplate)                                                                                                                          周银辉 在WPF中我们可以为自己的数据定制显示方式,也就是说虽然某数据

WPF 后台获得 数据模板里的内容控件(DataTemplate)

原文:WPF 后台获得 数据模板里的内容控件(DataTemplate) 假如 <Window.Resources> 里 有一个 Datatemplate 我想获得TextBlock XAML <DataTemplate x:Key="dtName"> <TextBlock Text="content"/> </DataTemplate> 后台代码 DataTemplate d = this.FindResource(

WPF数据模板(7)

数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列表,列表控件, 可以修改其中的ItemTemplate. 3.修改ContentTemplate, 例UserControl控件的数据展现形式. CellTemplate 模板 下面用一个例子, 来演示CellTemplate使用.例子实现一个DataGrid 展示一个普通的数据标, 同时新增一列C

Cacti 模板(图形模板、数据模板、主机模板)与自定义监控脚本

Cacti定义了三种类型的模板,分别是 主机模板 数据模板 图形模板     主机模板(Host templates),它是图像模板和数据查询的一个集合,描述了监控某一类型的机器需要生成那些图像. 数据模板(Data templates),它描述了 Cacti 存储哪些数据到指定类型的 RRD 文件.该模板与 RRDTool 工具的 create 命令相关. 图形模板(Graph templates),描述了生成的一张图像应该是什么样子的.包括使用哪些数据模板.展示哪些元素.是否使用 CDEF

WPF 数据模板

数据模板实质上也是以内容模板为基础,在数据模板中,是对内容模板重复的显示,以达到迭代显示数据的作用,所以在数据模板中,可以添加呈现数据的任意元素.能够添加数据模板的元素,主要是继承自ItemsControl类的控件,通过控件的ItemTemplate属性来支持,比如我们常用的ListBox和ComboBox控件.案例如下: 创建一个学生类: public class Student { public string Name { get; set; } public int Age { get;

WPF数据模板中绑定事件不触发问题

今天比较闲,做一个练手的项目,结果在xaml中写了一个用户的数据模板后,在其中的某个Canvas上绑定了一个鼠标左击的事件,结果调试的时候,无论怎么点击都不跳到断点那里,百思不得其解. 之后尝试不绑定事件,直接采用内联事件的写法,将事件写在控件上,并且事件的处理写在cs代码而非ViewModel中,则可以使用,如此可以判断是采用MVVM时,命令没有成功绑定到事件上. 刚开始以为是DevExpress的MVVM框架的BUG.后来改成自己手写的MVVM,并未解决问题,思考再三,觉得是数据模板并未获取

控件中数据模板禁用小键盘减号折叠

WPF里面自定义了TreeListView控件,在树列表项的数据模板中添加了文本框,当在文本框内输入小键盘的减号时,自动折叠:因为小键盘+与-符号是自动折叠的:可以对win7及以上系统 的文件夹列表树,进行验证:为了禁止输入时不折叠,使用以下代码实现 <controls:TreeListView.Columns> <GridViewColumn Header="列头名称"> <DataTemplate> <TextBox Text="

8天入门wpf—— 第四天 模板

今天说下wpf中的模板,前面一篇中我们讲到了style,但是style所能做的仅仅是在现有控件的基础上进行修修补补,但是如果我们想彻底颠覆控件样式,那么我们就必须使用这一篇所说的模板. 老外写书都喜欢在篇头搞一个类图,方便我们宏观认识,这里我也上一个. 一:控件模板 1:ControlTemplate 我们知道wpf的控件都是继承自Control,在Control类中有一个Template属性,类型就是ControlTemplate. 那么利用这个ControlTemplate就可以彻底的颠覆控

WPF自定义控件与样式(13)-自定义窗体Window &amp; 自适应内容大小消息框MessageBox

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 自定义Window窗体样式: 基于自定义窗体实现自定义MessageBox消息提示框: 二.自定义Window窗体样式 自定义的Window窗体效果:   因为WPF默认的窗体比较简陋,大都需要自己实现Window窗体样式效果,基本思路很简单: 第一步:干掉默认样式:WindowStyle = Windo