Есть ли способ построить DataTemplate только с C # - PullRequest
0 голосов
/ 28 мая 2018

Есть ли способ построить DataTemplate без использования устаревшего FrameworkElementFactory или XamlReader.Load метода интерпретации строки с кодом (связанный вопрос) или (другой связанный) ?

DataTemplate dt = new DataTemplate();
StackPanel sp = new StackPanel();
ComboBox cellComboBox = new ComboBox() { Visibility = Visibility.Collapsed };
CheckBox cellCheckBox = new CheckBox() { Visibility = Visibility.Collapsed };

sp.Children.Add(cellComboBox);
sp.Children.Add(cellCheckBox);

// then add the stackpanel somehow?

Обновление: почему? Это для новой программы, которая может поддерживаться годами.Разбор строки XamlReader во время выполнения для чего-то, что имеет конструктор, методы, свойства ... чувствует себя глупо.FrameworkElementFactory устарел для нескольких версий, но реальной замены никогда не было.

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Чтобы уточнить ответ @ mm8: нет, потому что, если вы проверите метод FrameworkTemplate.LoadContent, вы обнаружите, что шаблон в основном является оберткой, которая использует либо FrameworkElementFactory, либо TemplateContentдля загрузки содержимого, TemplateContent является утилитой для чтения XAML потока узла.Таким образом, это единственный способ работы шаблона.

Лично я рекомендовал бы использовать XAML (как отдельный *. Xaml файл, а не string), потому что он гораздо более читабелен, но также и потому, что FrameworkElementFactory имеет ограниченную функциональность, то есть он поддерживает только свойства зависимостей и перенаправленные события (вы не можете создать фабрику, которая установила бы обычный CLR свойство или обработчик события).Однако у него есть одно преимущество перед XAML - он поддерживает универсальные классы, поэтому, возможно, наиболее подходящим является сочетание обоих.

0 голосов
/ 29 мая 2018

Есть ли способ построить DataTemplate только с C #

Да, вы используете метод FrameworkElementFactory или XamlReader.Load для программного создания DataTemplate.

... без использования устаревшего FrameworkElementFactory или XamlReader.Load метода?

Краткий ответ: Нет.

Зачем вам ещедругой способ, когда уже есть два?Также обратите внимание, что совершенно нормально использовать класс FrameworkElementFactory, если вы не хотите использовать строки.Несмотря на то, что говорится в документации по MSDN, этот тип не помечен как устаревший или устарел в .NET Framework 4.7.2.

...