Цель использования 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.

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