2

私は を持っていますFrameworkElement。たとえば、StackPanel子供の場合、プロパティが私のDataTempltateであるを作成する必要があります。この作業を行うには、 myを同等のに変換する必要があります。VisualTreeFrameworkElementFrameworkElementFrameworkElementFactory

どのようにできるのか?

4

1 に答える 1

2

おそらく、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ので、おそらくその子も同じ方法でコピーする必要があります。

また、FrameworkElementFactory の MSDNの備考セクションごとに

このクラスは、や FrameworkTemplateなどのサブクラスであるテンプレートをプログラムで作成する非推奨の方法です。このクラスを使用してテンプレートを作成する場合、すべてのテンプレート機能を使用できるわけではありません。テンプレートをプログラムで作成するための推奨される方法は、クラスのメソッドを使用して、文字列またはメモリ ストリームから XAML を読み込むことです。ControlTemplateDataTemplateLoadXamlReader

于 2012-10-10T13:19:44.697 に答える