继续聊WPF——动态数据模板

我为啥称之为“动态数据模板”?先看看下面的截图,今天,我们就是要实现这种功能。

 

大概是这样的,我们定义的DataTemplate是通过触发器动态应用到 ComboBoxItem 上。

这个下拉列表控件绑定了一个Person集合,Person类的定义如下:

 

[csharp] view plain copy
  1. public class Person  
  2. {  
  3.     public string Name { get; set; }  
  4.     public int Age { get; set; }  
  5.     public string Email { get; set; }  
  6.     public override string ToString()  
  7.     {  
  8.         return Name;  
  9.     }  
  10. }  


 

这里重写了ToString方法,因为ComboBox生成的项是调用对象的ToString方法的,为了能不设置数据模板的前提下正确显示列表项,需要重写ToString方法,默认显示姓名属性。
然后,我们为ComboBoxItem定义一个处于高亮状态时使用的数据模板,也就是当鼠标移到项上时发生。
[html] view plain copy
  1. <Window.Resources>  
  2.     <!-- 
  3.         当项高亮显示时使用的数据模板 
  4.     -->  
  5.     <DataTemplate x:Key="hightlightTmp">  
  6.         <Grid>  
  7.             <Grid.RowDefinitions>  
  8.                 <RowDefinition Height="auto"/>  
  9.                 <RowDefinition Height="auto"/>  
  10.             </Grid.RowDefinitions>  
  11.             <StackPanel Margin="0,5,0,0" Grid.Row="0" Orientation="Horizontal">  
  12.                 <TextBlock Margin="2,0" FontWeight="Bold" FontSize="14">  
  13.                             <TextBlock.Text>  
  14.                                 <Binding Path="Name"  
  15.                                          StringFormat="姓名:{0}"/>  
  16.                             </TextBlock.Text>  
  17.                 </TextBlock>  
  18.                 <TextBlock Margin="20,0">  
  19.                             <TextBlock.Text>  
  20.                                 <Binding Path="Age"  
  21.                                          StringFormat="年龄:{0}"/>  
  22.                             </TextBlock.Text>  
  23.                 </TextBlock>  
  24.             </StackPanel>  
  25.             <TextBlock Margin="0,2,0,5" Grid.Row="1">  
  26.                         <TextBlock.Text>  
  27.                             <Binding Path="Email"  
  28.                                      StringFormat="电邮:{0}"/>  
  29.                         </TextBlock.Text>  
  30.             </TextBlock>  
  31.         </Grid>  
  32.     </DataTemplate>  
  33.        ..............          
  34. </Window.Resources>  


 

为 ComboBoxItem 定义一个样式。
[html] view plain copy
  1. <Window.Resources>  
  2.      ................          
  3.     <!-- 项样式 -->  
  4.     <Style x:Key="cmbStyle" TargetType="{x:Type ComboBoxItem}">  
  5.         <Style.Triggers>  
  6.             <Trigger Property="IsHighlighted" Value="True">  
  7.                 <Setter Property="ContentTemplate"  
  8.                         Value="{StaticResource hightlightTmp}"/>  
  9.             </Trigger>  
  10.         </Style.Triggers>  
  11.     </Style>  
  12. </Window.Resources>  


 

在窗体中声明一个ComboBox。
[html] view plain copy
  1. <Grid>  
  2.     <ComboBox x:Name="cmb" Margin="10,10"  
  3.               Height="24" Width="200"  
  4.               HorizontalAlignment="Left"  
  5.               VerticalAlignment="Top"  
  6.               ItemContainerStyle="{StaticResource cmbStyle}"/>  
  7. </Grid>  


 

最后,切换到代码视图,完成设置数据源的C#代码。
[csharp] view plain copy
  1. public Window1()  
  2. {  
  3.     InitializeComponent();  
  4.     this.cmb.ItemsSource = new Person[]  
  5.     {  
  6.         new Person{Name="小李",Age=22,Email="suk211@163.com"},  
  7.         new Person{Name="小王",Age=20,Email="minat@126.com"},  
  8.         new Person{Name="黄涨",Age=21,Email="laned2@21cn.com"},  
  9.         new Person{Name="高产",Age=22,Email="ha@136.com"},  
  10.         new Person{Name="杜林",Age=21,Email="null@yaahoo.com"},  
  11.         new Person{Name="杨白姥",Age=50,Email="cYang@21cn.com"},  
  12.         new Person{Name="鸟人",Age=31,Email="bgl@ask.net.cn"},  
  13.         new Person{Name="宋小八",Age=28,Email="xde227@123h.com"}  
  14.     };  
  15. }  


 

完成,这时候运行一下,你会看到上文中截图中的效果了。

转载于:https://www.cnblogs.com/sjqq/p/8379479.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刺激战场c语言,刺激战场:假车库、C字楼都是啥?学会吃鸡术语新手变大神!...

原标题&#xff1a;刺激战场&#xff1a;假车库、C字楼都是啥&#xff1f;学会吃鸡术语新手变大神&#xff01;刺激战场有越来越多的新玩家加入其中&#xff0c;然而新手想入门&#xff0c;却有时候找不对方法&#xff0c;其实吃鸡这个游戏其实还是非常简单的&#xff0c;不过想…

WPF 创建无边框的圆角窗口

第一步&#xff1a;去掉窗体默认样式的边框 首先将窗体的背景设为透明&#xff0c;将允许透明的属性设置为True&#xff0c;即&#xff1a;Background"Transparent" AllowsTransparency"True"&#xff0c;将Window的WindowStyle属性设置为None&#xff0c…

c语言关于链表选择题看不懂,有关链表基本操作三题

因为觉得C语言老师讲链表讲的太匆忙了&#xff0c;况且PPT太乱太杂&#xff0c;看不懂因此特地重写了次这周三上机有关链表操作的三题。(所写题目默认已排序&#xff0c;不考虑排序)问题A:在单链表中按学号查成绩时间限制: 1 Sec 内存限制: 128 MB提交: 62 解决: 43[提交][状…

linux下的awk程序执行

#!/bin/awk -f awk脚本开头使用这个命令&#xff0c;赋予这个文本文件以执行的权限。这样做之后&#xff0c;你就可以在命令行中用类似于下面这样的方式调用并执行这段awk程序了。 BEGIN和END的大括号必须紧其后&#xff0c;如果换行会出错&#xff1a; awk: cmd. line:14: war…

HTMLParser-实战

了解了HTMLParser库的知识后&#xff0c;选择做一个小训练&#xff0c;对https://www.python.org/events/python-events/这个网址进行分析&#xff0c;之后输出其中每次会议的题目、时间和地点。 如果要简单了解下HTMLParser库可以点击打开 下面进入正题 这是网站的源码&#x…

c语言会员卡管理系统,路西牌会员管理系统。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼void VIP::show( Node *v){no(v);char *aVIP::sex(v);std::cout<<< "会员姓名: "<< node.item.num[1]<< endl<< "性别: "<< sex(v)<<< "手机号码: "<…

Data URI scheme 在 html 中嵌入小图片

例如: <img src"https://img-blog.csdnimg.cn/2022010704064257868.png" /> 这会显示一张图片,网上的资料一般说是 ie8 才支持,不过我在老早前就见过了,应该和 ie8 没什么关系. 刚刚又用 ie6 试了一下,的确是可以的.这是以讹传讹啊. 另外据说这只支持 32K 大小…

常见的不同类型运算的转换方式

1.字符串和数字相加&#xff0c;数字转成字符串. var one"This is a test"; var two123; var threeonetwo;// 结果&#xff1a;three:This is a test123 2.数字和布尔值相加&#xff0c;布尔值 false 转成 0&#xff0c;true 转成 1 var one13; var twotrue; var thr…

c++2015语言,2015年7月TIOBE编程语言排行榜:C++ 的复兴

2015年7月TIOBE编程语言排行榜&#xff1a;C 的复兴C是2015年上半年同比增长最快的编程语言。具体为C 增长3.1%&#xff0c;Java 增长2.0%&#xff0c;C#增长1.6%&#xff0c;Python增长1.6%。C大幅度增长的原因可能是引入了新的C11标准。这使得C被大范围的接受。C 11标准为C带…

js面向对象开发互联网机顶盒应用头端之二

/*** Dare Movie Object.* constructor*/ //声明构造函数 构造函数初始化变量Dare.Movie function() { this.parent new Dare.Util(); this.className "Dare.Movie"; //----类Dare.Movie全局属性变量-----// this.stylePath dareStyle.getStylePath(); this.…

nginx内置变量 大全

nginx内置变量 内置变量存放在 ngx_http_core_module 模块中&#xff0c;变量的命名方式和apache 服务器变量是一致的。总而言之&#xff0c;这些变量代表着客户端请求头的内容&#xff0c;例如$http_user_agent, $http_cookie, 等等。 下面是nginx支持的所有内置变量&#xf…

android抽奖动画,Android App中实现简单的刮刮卡抽奖效果的实例详解

主要思想&#xff1a;将一个view设计成多层&#xff1a;背景层&#xff0c;含中奖信息等&#xff1b;遮盖层&#xff0c;用于刮奖&#xff0c;使用关联一个Bitmap的Canvas在该Bitmap上&#xff0c;使用它的canvas.drawPath的api来处理 手势滑动(类似刮奖的动作)使用paint.setXf…

忙了一上午终于把形状特征搞定了啊

就是光滑度和紧致度&#xff0c;这个实现起来还是比较简单的&#xff0c;不过不知道这两个特征作用到底有多大啊&#xff01;

如何提高英语听力(内容摘自NECCS)+ 乘法表

乘法表 print(\n.join([ .join([%s*%s%-2s%(y,x,x*y) for y in range(1,x1)]) for x in range(1,10)])) 如何提高英语听力 很喜欢这篇关于提高英语听力的文章&#xff0c;所以收藏下来和大家一同分享一下 人走路时要用两条腿&#xff0c;没有任何人会觉得走路费劲。可如果让人…

android新拟态实现方法,Android 新拟态UI (Neumorphism)

前言本文转自github&#xff0c;只是进行了图片的处理和部分翻译&#xff0c;已获作者授权截至首次发文前找到的原作者的文章地址-May,17,2020若找到本文章更新的时间节点&#xff0c;请私信我更新。原作者github地址文末附源码下载地址&#xff0c;免费。Android上的拟态化UIT…

codeforces 919E Congruence Equation

E. Congruence Equationtime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputGiven an integer x. Your task is to find out how many positive integers n (1 ≤ n ≤ x) satisfy where a, b, p are all known co…

抽象工厂模块在开发中的应用

抽象工厂是设计模块中创建型模式的一种&#xff0c;它比起工厂方法模式来说&#xff0c;更加具有一般性&#xff0c;在本模式中会引入一个产品族的概念&#xff0c;就是说,在本模式中抽象产品会有多个&#xff0c;然后用抽象工厂去调用它们&#xff0c;具体怎么去调用由具体工厂…

android 过滤数组中的重复元素,Flutter List数组避免插入重复数据的实现

List具有一定长度存在索引的对象集合(长度为0不存在索引,长度>0存在索引)常见列表1、定长列表默认值null例如:List fixedLengthList new List(2)、List fixedLengthList new List(8)List fixedLengthList new List(2);for(int i0;i<2;i){print("索引为${i}的值${…

[js]jquery里的jsonp实现ajax异源请求

同源请求-jquery <script type"text/javascript" src"http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script type"text/javascript">$.ajax({url: "data.txt",type: "get",dataType…

android listview remove 动画,给Android ListView添加删除item动画

给Android ListView添加删除item动画给listview删除一个item的时候加上一个折叠动画&#xff0c;感觉效果会好一点。步骤是当删除一个view&#xff0c;先用动画把view的高度改变&#xff0c;看上去就是折叠的效果。当动画完成的时候&#xff0c;再真正把item移除。private void…