WPF中各个Template的分析

WPF入门8:模板(Template) 什么是模板(Template)?模板应用在View层,它的主要作用是修改控件的样式、交互、数据展示。模板主要分为:DataTemplate 和 ControlTemplate。ControlTemplate它决定了控件“长成什么样子”,并让开发者有机会在控件原有的内部逻辑基础上扩展自己的逻辑。DataTemplate是数据内容的展示方式,一条数据显示成什么样子,是简单的文本还是直观的图形就由它来决定了。 阅读详情
--转载
在使用TabControl、ListView、Menu、TreeView的时候被各种Template搞得头昏眼花,决心把这个问题搞清楚,究竟什么时候该用什么Template?这是个麻烦的问题,欠揍的表达方法是“根据俺这么多年写程序的经验,这是一个需要经验才能解决的问题”。首先看一下相关几个类的层次结构:
Control
  |
  +---- ContentControl
  |       |
  |       +---- ListBoxItem
  |       |
  |       +---- HeaderedContentControl
  |               |
  |               +---- TabItem
  |
  +---- ItemsControl
          |
          +---- TreeView
          |
          +---- MenuBase
          |
          +---- HeaderedItemsControl
          |       |
          |       +---- MenuItem
          |       |
          |       +---- TreeViewItem
          |
          +---- Selector
                  |
                  +---- TabControl
                  |
                  +---- ListBox
 
值得关注的类有四个,为了简单清楚起见,给他们重新起名字:
  1. ContentControl:无标题的单元素容器
  2. HeaderedContentControl:有标题的单元素容器
  3. ItemsControl:无标题的多元素容器
  4. HeaderedItemsControl:有标题的多元素容器
各个类有不同的Template,引发我头疼症状的一共有3个,也给他们重新起名字:
  1. ContentTemplate:单元素的容器画单子元素的画笔
  2. ItemTemplate:多元素的容器画每个子元素的画笔
  3. HeaderTemplate:有标题的容器画标题的画笔
好,一切到目前为止都很清晰。再来看看各个类都有哪些画笔:
  1. ContentControl:无标题的单元素容器,只有画单子元素的画笔
  2. HeaderedContentControl:有标题的单元素容器,显而易见,比上面多了一个画标题的画笔
  3. ItemsControl:无标题的多元素容器,只有一个画每个子元素的画笔ItemTemplate
  4. HeaderedItemsControl:有标题的多元素容器,也是显而易见,多了一个画标题的画笔
同样,一切都是理所当然,显而易见。然而这时,混乱产生了:当“容器”和“元素”搭配到一起的时候,各种画笔就开始复杂起来了。现在来分析几个典型的容器和元素的搭配:

1、TabControl和TabItem

TabControl本身是一个无标题的多元素容器,按上面所述,没有标题画笔,只有一个画每个子元素的ItemTemplate画笔。
他肚子里的元素是TabItem,这是一个有标题的单元素容器,有两个画笔,ContentTemplate和HeaderTemplate。那么TabItem的画笔和TabControl的画笔是什么关系呢?
事实上我撒谎了:TabControl有两个画笔,ContentTemplate和ItemTemplate,而不是一个,其中ItemTemplate继承自父类,而ContentTemplate是他自己重新定义的一个属性——好,我们终于抓住了这个伪造身份证扰乱社会治安破坏和谐社会的家伙。这种做法虽然很混淆,但是带来了方便,容器和元素的对应关系是
  • TabItem的HeaderTemplate就是TabControl的ItemTemplate
  • TabItem的ContentTemplate就是TabControl的ContentTemplate

2、Menu和MenuItem

Menu只有一个ItemTemplate,MenuItem有HeaderTemplate和ItemTemplate。这里其实有两个搭配,一个是Menu和MenuItem的搭配,另一个是MenuItem和MenuItem的搭配。在这两个搭配中,有以下共同点:
  • 容器的ItemTemplate变成元素的HeaderTemplate
  • 每个MenuItem都用自己对应的HeaderTemplate来显示自己

这是一个分级的结构,WPF提供了HierarchicalDataTemplate,很方便,不过暂时先不说这个,免得问题更加复杂化。

3、TreeView和TreeViewItem

从上面的类层次结构可以看出,这个搭配和Menu/MenuItem的情况应该是一样的,事实上在XAML中很容易在TreeView和Menu之间切换,容易到了只需要改几个tag就可以,可见两者是“同构”的。

4、ListBox和ListBoxItem

ListBox本身是一个无标题的多元素容器,只有一个ItemTemplate。ListBox是遵纪守法的好同志,不像TabControl伪造了一个ContentTemplate。他的ItemTemplate就是ListBoxItem的ContentTemplate,并且ListBoxItem也没有其他的画笔了,这一对组合是最简单的。

《深入浅出WPF》学习笔记(六)——Template Template 个人认为这部分涉及界面的内容较多,理解的东西与之前相比相对简单,但是内容更杂,需要在实际编程时多用多积累。 一、模板的内涵   WPF系统与业务逻辑的边界是Binding,Binding沟通了内部程序和界面元素;   控件(Control)是数据内容和算法内容两种表现形式的双重载体: 算法内容:决定控件的功能:展示哪些数据,具有哪些方法,响应哪些操作,能激发什么事件; 数据内容... 阅读详情

相关推荐

DTS 数据迁移

支持关系型数据库(MySQL, Oracle, SQL Server等)、NoSQL数据库、大数据系统等。DTS数据迁移是现代化数据架构调整和云迁移过程中的重要工具,能够大大降低数据迁移的复杂度和风险。DTS (Data Transmission Service) 是一种数据迁移和同步服务,:先迁移历史数据(全量),再实时同步新增变化(增量):不同数据库类型间迁移,如Oracle到MySQL。:将单库数据迁移到分库分表架构。:将业务数据迁移到分析型数据库。:将本地数据库迁移到云数据库。

qq_41081716的博客 748

WPF 模板(Template)

WPF 模板(Template)

lvxingzhe3的博客 4864

高压脉冲发生器的各种电路图

高压脉冲发生器的各种电路图

qq_65102825的博客 5898

WPF后台定义Datagrid的HeaderTemplate

WPF后台定义Datagrid的HeaderTemplate需求 需求 出于权限管理需要,不同权限的用户需要看到不同的界面,在我目前项目中,某datagrid的某一列在管理员可见界面中需要显示一个文本框,而其他权限的用户打开此界面则需隐藏该文本框。 //DataGrid是要操作的datagrid的Name DataGrid.Columns[4].HeaderTemplate = new DataTemplate() { VisualTree = CreateColHeader(userLevel) };

鹿的博客 1598

笔记——Oracle19c

Oracle阅读笔记

weixin_63819458的博客 1348

大模型学习路线之多模态模型

​ (Frankly speaking,博主太懒了)章节一只对CLIP、BLIP、BLIP2、InstructBLIP进行了整理,章节二以CLIP、VisualGLM作为实践案例。​ 实际上多模态模型除了CLIP、BLIP、BLIP2、InstructBLIP,还有LLaVA、miniGPT4,以及国内清华的VisualGLM、阿里的Qwen-VL等。(更多多模态原理可以看文末的参考说明)一、多模态模型 & 理论。

2401_86435672的博客 2287

在WPF的GroupBox中实现自定义头部模板

这段代码是一个XAML标记语言的示例,用于定义一个分组框(GroupBox)的头部模板。:这是一个数据模板,用于定义分组框头部的内容。表示通过查找当前分组框的祖先元素(即包含该分组框的父级分组框)来获取数据上下文。:这是一个属性,指定了分组框头部的模板。:这是一个数据绑定表达式,用于获取当前任务的名称并将其显示在文本块中。总结起来,这段代码定义了一个分组框的头部模板,用于显示分组框。:这是一个文本块的内部元素,用于显示具体的文本内容。:这是一个按钮元素,用于触发添加新的巡检点操作。设置了按钮上显示的文本。

Wod_7的博客 1659

ITK-snap进行分割区域标注、三维显示及改变显示颜色

在进行医学图像器官分割时,无论我们是用传统方法还是深度学习,最后肯定要用到手动分割的区域作为金标准来验证我们方法的精度。但是手动标注器官的轮廓是十分耗时的,这里我介绍一个比较简单的标注方法,以肺分割作为例子。 我们使用ITK-snap作为分割标注工具。 当切片间距离比较小时,比如1mm,一个患者的完整HRCT序列通常在200张以上,如果让医生一一进行分割区域标注是非常耗时乏味的。因此,我们可以使用最简单的阈值法比如OSTU,加上基本的形态学操作对肺进行粗分割得到粗略的分割掩码,在此基础上再手动的对分割结果进

u010409517的博客 2万+

WPF Template 技术详解

详细的介绍了WPF中Template机制

2401_82413779的博客 929

灵境视界:基于云计算与深度学习的智能手语识别AR眼镜

灵境视界”不仅仅是一款AR眼镜,它代表了未来无障碍沟通设备的发展方向。随着云计算与深度学习技术的不断进步,未来我们将进一步优化识别算法,提升翻译精度,并扩展更多语言和手语类型,为全球听障人士提供更加全面的沟通解决方案。是一款融合了云计算与深度学习技术的增强现实(AR)眼镜,专为听障人士和手语使用者设计。这款眼镜不仅具备先进的AR显示功能,还能实时识别并翻译手语,打破听障人士与健听人士之间的沟通障碍,推动无障碍社会的建设。,让沟通无界,视界无限。

qq_62634009的博客 724

GhidraMCP:AI驱动的逆向工程革命——让LLM自主操作Ghidra进行自动化分析

(Ghidra Machine Control Protocol)应运而生,它通过将LLM与Ghidra(美国NSA开源逆向工具)结合,实现了AI驱动的自动化逆向工程流程。逆向工程是软件安全、漏洞分析和代码审计的核心环节,但传统方法依赖人工分析,耗时且易出错。未来,随着LLM技术的演进和逆向工程工具的优化,GhidraMCP有望成为安全研究人员和开发者的核心工具,推动逆向工程进入“AI辅助时代”。GhidraMCP通过LLM与Ghidra的深度整合,重新定义了逆向工程的自动化边界。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2114

WPF中各个Template的分析(转)

作为新手,还是没看明白本文,留着以后再学习 在使用TabControl、ListView、Menu、TreeView的时候被各种Template搞得头昏眼花,决心把这个问题搞清楚,究竟什么时候该用什么Template?这是个麻烦的问题,欠揍的表达方法是“根据俺这么多年写程序的经验,这是一个需要经验才能解决的问题”。首先看一下相关几个类的层次结构:Control | +---- Content...

weixin_30530939的博客 128

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

wpf 的各个template

--转载 在使用TabControl、ListView、Menu、TreeView的时候被各种Template搞得头昏眼花,决心把这个问题搞清楚,究竟什么时候该用什么Template?这是个麻烦的问题,欠揍的表达方法是“根据俺这么多年写程序的经验,这是一个需要经验才能解决的问题”。首先看一下相关几个类的层次结构:Control | +---- ContentControl | ...

weixin_33774883的博客 142

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WPF中Template、Style、Adorner异同

WPF中Template、Style、Adorner异同

zzyzxb的博客 1024

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WPF Template简介

分类 ControlTemplate ItemsPanelTemplate DataTemplate 样式Style和模板Template对比 Style:样式,风格 Template:模版,某种控件长什么样子 Style依赖原始控件,对控件的已有属性进行改造 Template天马行空,实现对控件颠覆式的改造 Style中可以包含Template Style嵌套Template <Window.Resources> <Style TargetType="CheckBox" x:

L.的博客 842

WPF中Style和Template异同

WPF中Style和Template异同

zzyzxb的博客 1221

WPF的ControlTemplateDataTemplate和其它Template

我们现在能知道的是,对于字符串类型的 Content 会显示一串文字,如果填入的是控件内容,它会显示控件 UI 的样子,用来为按钮创建图标等相关需求的时候会非常有用。可是,object 也就意味着是所有类型,我们自己的 class 实例对象给它会是什么样子?让我们在 Button 初始化的时候在 C# Code-Behind 代码的部分创建一些内容吧!set;set;请注意 xaml 中关于的部分。Style这是事件订阅后要执行的事情。// 虽然可以写成 button!

dotnethello的博客 996

浅谈WPF之各种Template

前几天写了一篇文章【浅谈WPF之控件模板和数据模板】,有粉丝反馈说这两种模板容易弄混,不知道什么时候该用控件模块,什么时候该用数据模板,以及template和itemtemplate之间的关系等,今天专门写一篇文章,简述WPF中各种模板及其相互关系。管理Items的排列方式,如,ComboBox默认是竖直排列的,我们要横着排列,只需要定义ItemsPanel为WrapPanel,就可以了。但是,只负责显示,而不能管理如何显示,如果我们要内容横向排列,就要用到ItemsPanel。

绳锯木断,水滴石穿,专心写文,无问西东!!! 2146

wpf如何获取control template里的元素

wpf中的控件模板里的元素有自己独立的命名域。 因此不能通过FindName来根据x:Name来查找子节点。 自己写了一个方法, 通过可视树遍历子节点,然后匹配名字。 如下: private static ChildItem FindVisualChildItemChildItem>(DependencyObject obj) where ChildItem : DependencyObje

muzizongheng的专栏 5141

WPF-控件模版 Template

使用 ControlTemplate.Triggers 标签。

qq_35059264的博客 886

wpf 中的template

template 模板,wpf中定制外观的东西,用来规定控件或者数据显示的组成部分。 template 主要分为两大类 应用于控件的controlTemplate。 应用于数据的DataTemplate。多用于itemscontrol controltemplate就是基本的template。用来规定一个控件的外观。这里需要提到的就是内容占位符:contentpresenter ...

aisheng3237的博客 266

WPF : ListBox的几种Template属性

WPF : ListBox的几种Template属性 原文:WPF : ListBox的几种Template属性 属性名 属性的类名 功能 示例 Template ControlTemplate 定义控件自身的外观.其子元素的布局可以自定义,也可以由ItemsPresenter定义. <Style Ta...

weixin_30780649的博客 387

WPF关于C#代码实现Template

以改变一个Button为例:首先添加FrameworkElementFactoryButton btn = new Button();//定义FrameworkElementFactory          FrameworkElementFactory eleFactory = new FrameworkElementFactory(typeof(TextBlock), "TextBlock")

有个程序员 6361
上一篇: TemplatePart作用
下一篇: ControlTemplate和DataTemplate的区别
DICOMV3PACS
博客等级 码龄17年 161粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值