2

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

我能怎么做?

4

1 回答 1

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,所以你可能也必须以同样的方式复制它的孩子。

同样根据MSDN 上的备注部分,对于 FrameworkElementFactory

此类是一种以编程方式创建模板的弃用方式,模板是FrameworkTemplate诸如ControlTemplateor 的子类DataTemplate;使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的推荐方法是使用类的Load方法从字符串或内存流加载 XAML XamlReader

于 2012-10-10T13:19:44.697 回答