Получить FrameworkElementFactory из FrameworkElement

У меня есть FrameworkElement, такие как StackPanel с детьми, мне нужно создать DataTempltate чья VisualTree собственность моя FrameworkElement, Чтобы сделать эту работу мне нужно конвертировать FrameworkElement в эквиваленте FrameworkElementFactory,

Как я могу сделать?

1 ответ

Решение

Вероятно, вы можете использовать классы 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 или же DataTemplate; не все функциональные возможности шаблона доступны при создании шаблона с использованием этого класса. Рекомендуемый способ программного создания шаблона - загрузить XAML из строки или потока памяти, используя Load метод XamlReader учебный класс.

Другие вопросы по тегам