WPF怎么使用代码创建数据模板DataTemplate
WPF怎么使用代码创建数据模板DataTemplate
这篇文章主要讲解了“WPF怎么使用代码创建数据模板DataTemplate”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF怎么使用代码创建数据模板DataTemplate”吧!
起因
我们都知道, 在XAML界面当中编写DataTemplate很简单, 但是有时候我们需要在代码当中去设置DataTemplate。
该怎么办?
比如, 实际需求是DataGrid当中需要创建100个DataTemplate列, 很明显,这些列不太方便在XAML中编写。
这个时候,我们就需要在代码当中动态生成模板列。
答案
如下面所示,我创建了一个DataGridTemplateColumn,其中包含了一个StackPanel里面放了两个Button按钮。
现在就是, 我们需要把这个过程用代码去生成, 这个时候我们就可以用到FrameworkElementFactory 类。
步骤分为几步:
创建DataGridTemplateColumn 对象, 设置Header等内容
DataGridTemplateColumntemplateColumn=newDataGridTemplateColumn();templateColumn.Header="标题";
创建 FrameworkElementFactory 对象, 设置Orientation属性水平排列
FrameworkElementFactoryfactory=newFrameworkElementFactory(typeof(StackPanel));factory.SetValue(StackPanel.OrientationProperty,Orientation.Horizontal);
向 FrameworkElementFactory 对象追加一个factory对象
FrameworkElementFactorybuttonEdit=newFrameworkElementFactory(typeof(Button));buttonEdit.SetValue(ContentProperty,"编辑");factory.AppendChild(buttonEdit);FrameworkElementFactorybuttonDel=newFrameworkElementFactory(typeof(Button));buttonDel.SetValue(ContentProperty,"删除");factory.AppendChild(buttonDel);
创建DataTemplate对象, 设置VisualTree 值为factory
DataTemplatedataTemplate=newDataTemplate();dataTemplate.VisualTree=factory;
最后把DataGridTemplateColumn 的CellTemplate 值设置为dataTemplate
templateColumn.CellTemplate=dataTemplate;
最终效果
关于整个过程梳理
有一点,我们需要清楚, 在XAML界面当中编写的任何代码, 其实本质上都是转化成C#代码, 既然如此来说, 只要XAML有的对象,我们都可以用C#代码编写, 但是为什么一般我们不这么做, 是因为XAML更加容易去表达界面上的元素, 代码的可视化以及可维护性。
再回到上面, 我们需要清楚上面的流程, 我们通过FrameworkElementFactory 创建了一个完整的视觉树的对象,里面包含了一个StackPanel容器,容器中放置了两个Button控件,最终把这个 FrameworkElementFactory 对象给了DataTemplate当中的VisualTree, 这里的意思是 我们给DataTemplate设置了可视化的视觉树结构, 最终DataTemplate决定了 DataGridTemplateColumn 的视觉呈现。
完整代码
DataGridTemplateColumnCreateDataGridTemplateColumn(){DataGridTemplateColumntemplateColumn=newDataGridTemplateColumn();templateColumn.Header="标题";FrameworkElementFactoryfactory=newFrameworkElementFactory(typeof(StackPanel));factory.SetValue(StackPanel.OrientationProperty,Orientation.Horizontal);FrameworkElementFactorybuttonEdit=newFrameworkElementFactory(typeof(Button));buttonEdit.SetValue(ContentProperty,"编辑");factory.AppendChild(buttonEdit);FrameworkElementFactorybuttonDel=newFrameworkElementFactory(typeof(Button));buttonDel.SetValue(ContentProperty,"删除");factory.AppendChild(buttonDel);DataTemplatedataTemplate=newDataTemplate();dataTemplate.VisualTree=factory;templateColumn.CellTemplate=dataTemplate;returntemplateColumn;}
感谢各位的阅读,以上就是“WPF怎么使用代码创建数据模板DataTemplate”的内容了,经过本文的学习后,相信大家对WPF怎么使用代码创建数据模板DataTemplate这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是恰卡编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
推荐阅读
-
怎么为WPF框架Prism注册Nlog日志服务
怎么为WPF框架Prism注册Nlog日志服务这篇文章主要为大家展...
-
WPF框架Prism中导航Navigation怎么使用
WPF框架Prism中导航Navigation怎么使用这篇文章主要...
-
WPF中怎么自定义ProgressBar滚动条样式
本篇文章为大家展示了WPF中怎么自定义ProgressBar滚动条样式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章...
-
WPF中InkCanvas基本操作方法的示例分析
这篇文章将为大家详细讲解有关WPF中InkCanvas基本操作方法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅...
-
怎么用WPF实现微信公众号多客服功能
这篇文章给大家分享的是有关怎么用WPF实现微信公众号多客服功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看...
-
使用WPF怎么编写一个转圈进度条效果
使用WPF怎么编写一个转圈进度条效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你...