我有一个FrameworkElement
,例如带有孩子的StackPanel
,我需要创建一个DataTempltate
,其VisualTree
属性是我的FrameworkElement
。要完成这项工作,我需要将FrameworkElement
转换为等效的FrameworkElementFactory
。
我该怎么办?
答案 0 :(得分:2)
您可以使用XamlWriter和XamlReader类来获取控件中使用的XAML的副本,并使用它来构建另一个控件
string panelXaml = XamlWriter.Save(myStackPanel);
StringReader stringReader = new StringReader(panelXaml);
XmlReader xmlReader = XmlReader.Create(stringReader);
StackPanel newStackPanel = (StackPanel)XamlReader.Load(xmlReader);
我认为这只会复制StackPanel
,因此您可能也必须以相同的方式复制它的子项。
同样符合Remarks section on MSDN for the FrameworkElementFactory
此类是以编程方式创建模板的弃用方式, 它们是
FrameworkTemplate
的子类,例如ControlTemplate
或。{DataTemplate
;并非所有模板功能都可用 您使用此类创建模板。推荐的方式 以编程方式创建模板是从字符串或a加载XAML 内存流使用Load
类的XamlReader
方法。