从FrameworkElement获取FrameworkElementFactory

时间:2012-10-10 12:45:19

标签: c# wpf datatemplate frameworkelement frameworkelementfactory

我有一个FrameworkElement,例如带有孩子的StackPanel,我需要创建一个DataTempltate,其VisualTree属性是我的FrameworkElement。要完成这项工作,我需要将FrameworkElement转换为等效的FrameworkElementFactory

我该怎么办?

1 个答案:

答案 0 :(得分:2)

您可以使用XamlWriterXamlReader类来获取控件中使用的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方法。