Цель использования FrameworkElementFactory
В одном из приложений я работаю, я нашел этот код -
public class MatrixCellTemplate : ColumnDataTemplate<MatrixCellContainer>
{
}
public class ColumnDataTemplate<T> : DataTemplate where T : FrameworkElement
{
public ColumnDataTemplate()
{
FrameworkElementFactory factory = new FrameworkElementFactory(typeof(T));
VisualTree = factory;
}
}
это MatrixCellTemplate
используется для установки CellTemplate
обычая DataGridTemplateColumn
(позже добавлено в DataGrid.Columns
коллекция) как это -
<DataGridTemplateColumn.CellTemplate>
<Matrix:MatrixCellTemplate />
</DataGridTemplateColumn.CellTemplate>
Я не уверен, какая польза от использования этого FrameworkElementFactory
и с какой проблемой я могу столкнуться, если использую напрямую MatrixCellContainer
как шаблон ячейки -
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Matrix:MatrixCellContainer>
</Matrix:MatrixCellContainer>
</DataTemplate>
<!--<Matrix:MatrixCellTemplate />-->
</DataGridTemplateColumn.CellTemplate>
1 ответ
Трудно догадаться о причинах этого кода, возможно, об уменьшении XAML, но вы действительно могли бы определить его вручную, функционально это не имеет значения (особенно потому, что в нем нет ничего динамического, что могло бы оправдать выполнение этого в коде позади первое место).
по факту FrameworkElementFactory
все равно не рекомендуется:
Этот класс является устаревшим способом программного создания шаблонов, которые являются подклассами FrameworkTemplate, такими как ControlTemplate или DataTemplate; не все функциональные возможности шаблона доступны при создании шаблона с использованием этого класса. Рекомендуемый способ программного создания шаблона - загрузить XAML из строки или потока памяти с помощью метода Load класса XamlReader.