FrameworkElementFactory

FrameworkElementFactory

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

我能怎么做?

最佳答案

您可能可以使用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;在以下情况下,并非所有模板功能都可用
  您可以使用此类创建模板。推荐的方式
  以编程方式创建模板是要从字符串或
  使用Load类的XamlReader方法的内存流。

关于c# - 从FrameworkElement获取FrameworkElementFactory,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12819670/

10-10 10:46