C# 有没有一种方法可以只用C构建一个数据模板#

C# 有没有一种方法可以只用C构建一个数据模板#,c#,wpf,datatemplate,C#,Wpf,Datatemplate,有没有一种方法可以在不使用FrameworkElementFactory或XamlReader.Load字符串解释方法的情况下构建数据模板 更新:为什么? 这是为了一个可能需要支持多年的新项目。XamlReader在运行时对具有构造函数、方法、属性的内容进行字符串解析。。。我觉得很难受。FrameworkElementFactory在几个版本中已被弃用,但从未有真正的替代品 有没有一种方法可以只用C构建一个数据模板# 是的,您可以使用FrameworkElementFactory或XamlRea

有没有一种方法可以在不使用
FrameworkElementFactory
XamlReader.Load
字符串解释方法的情况下构建数据模板

更新:为什么? 这是为了一个可能需要支持多年的新项目。XamlReader在运行时对具有构造函数、方法、属性的内容进行字符串解析。。。我觉得很难受。
FrameworkElementFactory
在几个版本中已被弃用,但从未有真正的替代品

有没有一种方法可以只用C构建一个数据模板#

是的,您可以使用
FrameworkElementFactory
XamlReader.Load
方法以编程方式创建
DataTemplate

…是否不使用不推荐的
FrameworkElementFactory
XamlReader.Load
方法

简短回答:没有


既然已经有两条路了,你为什么还需要另一条路呢?还要注意,如果您不想使用字符串,那么使用
FrameworkElementFactory
类是完全可以的。不管MSDN上的文档怎么说,这种类型在.NET Framework 4.7.2中并没有真正被标记为过时或不推荐使用。

要详细说明@mm8的答案:否,因为如果检查该方法,您会发现模板基本上是一个包装器,它使用
FrameworkElementFactory
TemplateContent
加载内容,
TemplateContent
是一个读取XAML节点流的实用程序。因此,这是模板可以操作的唯一两种方式

就个人而言,在这两者中,我建议使用XAML(作为一个单独的*.XAML文件而不是
字符串),因为它可读性更好,但也因为
FrameworkElementFactory
的功能有限,即它只支持依赖项属性和路由事件(您不能创建一个将设置常规CLR属性或事件处理程序的工厂)。不过,它比XAML有一个优势——它确实支持泛型类,所以可能将两者混合使用是最合适的方法

DataTemplate dt = new DataTemplate();
StackPanel sp = new StackPanel();
ComboBox cellComboBox = new ComboBox() { Visibility = Visibility.Collapsed };
CheckBox cellCheckBox = new CheckBox() { Visibility = Visibility.Collapsed };

sp.Children.Add(cellComboBox);
sp.Children.Add(cellCheckBox);

// then add the stackpanel somehow?