6

在我正在工作的一个应用程序中,我发现了这段代码 -

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>
4

1 回答 1

8

很难猜出这段代码背后的原因,也许是为了减少 XAML,但你真的不如手动定义它,在功能上它并不重要(特别是因为那里没有任何动态可以证明在代码隐藏中这样做是合理的第一名)。

事实上FrameworkElementFactory无论如何都已弃用:

此类是一种以编程方式创建模板的弃用方式,模板是 FrameworkTemplate 的子类,例如 ControlTemplate 或 DataTemplate;使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的推荐方法是使用 XamlReader 类的 Load 方法从字符串或内存流加载 XAML。

于 2012-02-01T06:55:38.513 回答