在我正在使用的一个应用程序中,我发现了以下代码-
public class MatrixCellTemplate : ColumnDataTemplate<MatrixCellContainer>
{
}
public class ColumnDataTemplate<T> : DataTemplate where T : FrameworkElement
{
public ColumnDataTemplate()
{
FrameworkElementFactory factory = new FrameworkElementFactory(typeof(T));
VisualTree = factory;
}
}此MatrixCellTemplate用于设置自定义DataGridTemplateColumn (稍后添加到DataGrid.Columns集合)的CellTemplate,如下所示-
<DataGridTemplateColumn.CellTemplate>
<Matrix:MatrixCellTemplate />
</DataGridTemplateColumn.CellTemplate>我不确定使用这个FrameworkElementFactory的好处是什么,如果我直接使用MatrixCellContainer作为单元格模板,我会面临什么问题-
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Matrix:MatrixCellContainer>
</Matrix:MatrixCellContainer>
</DataTemplate>
<!--<Matrix:MatrixCellTemplate />-->
</DataGridTemplateColumn.CellTemplate>发布于 2012-02-01 14:55:39
很难猜测这段代码背后的原因,也许是为了减少XAML,但您最好手动定义它,从功能上讲这并不重要(特别是因为它没有任何动态的东西可以证明在代码隐藏中做这件事是合理的)。
事实上,无论如何都不推荐使用FrameworkElementFactory:
此类是一种以编程方式创建模板的弃用方法,这些模板是FrameworkTemplate的子类,如ControlTemplate或DataTemplate;使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的推荐方法是使用XamlReader类的load方法从字符串或内存流加载
https://stackoverflow.com/questions/9091853
复制相似问题