博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[UWP]如何使用代码创建DataTemplate(或者ControlTemplate)
阅读量:5280 次
发布时间:2019-06-14

本文共 1649 字,大约阅读时间需要 5 分钟。

1. 前言

在UWP中DataTemplate是一个十分重要的功能,并且几乎无处不在,例如DataGrid中的DataGridTemplateColumn:

而且DateTemplate(或ControlTemplate)极有可能需要由代码动态生成。

UWP大致上有两种使用代码生成DateTemplate的方式。

2. 使用资源字典

这其实并不是由代码动态生成DataTemplate,只是比较方便的从资源字典读取DataTemplate的邪道,一般来说不好意思暴露给项目外的用户。

创建一个UserControl,然后把父类从“UserControl”改为“ResourceDictionary”,然后在Xaml中编写DataTemplate,为这个DataTemplate的x:Name赋值,并且将改为“internal”(这样DataTemplate才可以作为一个字段被项目中的其它类访问),代码如下:

public sealed partial class XamlResource : ResourceDictionary{    public XamlResource()    {        this.InitializeComponent();    }}

38937-20190114103745843-360346806.png

使用起来也很方便:

XamlResource resource = new XamlResource();ListControl.ItemTemplate = resource.ItemTemplate;

这种做法的好处是编辑Datatemplate时有智能感知和属性面板,不容易出错;调用起来也很简单。虽然不够动态,但我常常使用这种方式创建DataTemplate。

3. 使用XamlReader

用于解析XAML并创建相应的对象树。文档里给出的例子是构建一个Ellipse:

string xaml ="
";object ellipse = XamlReader.Load(xaml);

当然了,要在代码里构建一个Ellipse何必这样大费周章。对于XamlReader,我平时用得最多的就是用来创建DataTemplate和ControlTemplate这些不方便用代码构建的元素。记得在XAML的根元素添加xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""

var template = (DataTemplate)XamlReader.Load(@"        
");ListControl.ItemTemplate = template;

这种方式满足了“动态”这个需求,缺点也很明显:动态的就容易出错,而且这种方式很难构建复杂的DataTemplate。

4. 结语

这两种方式我都很常用,复杂的就用资源字典方式,简单但需要动态的就用XamlReader。有些人会为XamlReader做得更多,例如通过反射将一个TextBlock转换为XAML,再使用XamlReader读取成DataTemplate。我觉得这样也不错,但我还没遇到过这种应用场景就不尝试了。

5. 参考

转载于:https://www.cnblogs.com/dino623/p/Create-DataTemplate-Programatically.html

你可能感兴趣的文章
7.14
查看>>
SDN2017 第一次作业
查看>>
MySQL通过frm 和 ibd 恢复数据过程
查看>>
AngularJs 学习笔记(2)
查看>>
关于元素优先级
查看>>
oo第一单元作业总结
查看>>
SRS源码——Listener
查看>>
web.xml 4.0 头
查看>>
Java面向对象抽象类案例分析
查看>>
100.Same Tree
查看>>
JAVA 根据经纬度算出附近的正方形的四个角的经纬度
查看>>
对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
查看>>
Thymeleaf模板格式化LocalDatetime时间格式
查看>>
庖丁解“学生信息管理系统”
查看>>
Pyltp使用
查看>>
其他ip无法访问Yii的gii,配置ip就可以
查看>>
js创建对象
查看>>
有状态EJBBean和无状态的EJBBean
查看>>
设计模式的几种原则
查看>>
使用json格式输出
查看>>