我有一个FrameworkElement
,比如StackPanel
有孩子,我需要创建一个DataTempltate
,其VisualTree
属性是 my FrameworkElement
。要完成这项工作,我需要将我FrameworkElement
的等效转换为FrameworkElementFactory
.
我能怎么做?
我有一个FrameworkElement
,比如StackPanel
有孩子,我需要创建一个DataTempltate
,其VisualTree
属性是 my FrameworkElement
。要完成这项工作,我需要将我FrameworkElement
的等效转换为FrameworkElementFactory
.
我能怎么做?
您可能可以使用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
,所以你可能也必须以同样的方式复制它的孩子。
同样根据MSDN 上的备注部分,对于 FrameworkElementFactory
此类是一种以编程方式创建模板的弃用方式,模板是
FrameworkTemplate
诸如ControlTemplate
or 的子类DataTemplate
;使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的推荐方法是使用类的Load
方法从字符串或内存流加载 XAMLXamlReader
。