Получить 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
учебный класс.