我有一个FrameworkElement
,例如带有孩子的StackPanel
,我需要创建一个DataTempltate
,其VisualTree
属性是我的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
,因此您可能也必须以相同的方式复制它的孩子。同样根据Remarks section on MSDN for the FrameworkElementFactory
此类是通过编程方式创建模板的不推荐使用的方法,
是
FrameworkTemplate
的子类,例如ControlTemplate
或DataTemplate
;在以下情况下,并非所有模板功能都可用您可以使用此类创建模板。推荐的方式
以编程方式创建模板是要从字符串或
使用
Load
类的XamlReader
方法的内存流。关于c# - 从FrameworkElement获取FrameworkElementFactory,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12819670/