6

私が作業しているアプリケーションの1つで、このコードを見つけました-

public class MatrixCellTemplate : ColumnDataTemplate<MatrixCellContainer>
{
}

public class ColumnDataTemplate<T> : DataTemplate where T : FrameworkElement
{
    public ColumnDataTemplate()
    {
        FrameworkElementFactory factory = new FrameworkElementFactory(typeof(T));
        VisualTree = factory;
    }
}

これは、次のようなカスタム(後でコレクションに追加)のMatrixCellTemplateを設定するために使用されます-CellTemplateDataGridTemplateColumnDataGrid.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、とにかく非推奨です:

このクラスは、ControlTemplate や DataTemplate などの FrameworkTemplate のサブクラスであるテンプレートをプログラムで作成する非推奨の方法です。このクラスを使用してテンプレートを作成する場合、すべてのテンプレート機能を使用できるわけではありません。テンプレートをプログラムで作成するための推奨される方法は、XamlReader クラスの Load メソッドを使用して、文字列またはメモリ ストリームから XAML を読み込むことです。

于 2012-02-01T06:55:38.513 に答える