5

En una de las aplicaciones que estoy trabajando me he encontrado este código -propósito de utilizar FrameworkElementFactory

public class MatrixCellTemplate : ColumnDataTemplate<MatrixCellContainer> 
{ 
} 

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

Este MatrixCellTemplate se utiliza para establecer el CellTemplate de una costumbre DataGridTemplateColumn (añadido después de DataGrid.Columns colección) como esto -

<DataGridTemplateColumn.CellTemplate> 
    <Matrix:MatrixCellTemplate /> 
</DataGridTemplateColumn.CellTemplate> 

no estoy seguro de cuál es la ventaja de utilizar este FrameworkElementFactory y qué problema puedo enfrentar si uso directamente como plantilla MatrixCellContainer celular -

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Matrix:MatrixCellContainer> 
     </Matrix:MatrixCellContainer> 
    </DataTemplate> 
    <!--<Matrix:MatrixCellTemplate />--> 
</DataGridTemplateColumn.CellTemplate> 

Respuesta

8

difícil de adivinar el razonamiento detrás de este código, tal vez para reducir el XAML, pero en realidad puede ser que así definir de forma manual, funcionalmente no importa (sobre todo porque no hay nada dinámico en el que hay que justificaría hacer en código subyacente en primer lugar).

De hecho FrameworkElementFactory es obsoleto de todos modos:

Esta clase es una forma obsoleta para crear mediante programación de plantillas, que son subclases de FrameworkTemplate tales como ControlTemplate o DataTemplate; no toda la funcionalidad de la plantilla está disponible cuando crea una plantilla usando esta clase. La forma recomendada de crear una plantilla mediante programación es cargar XAML desde una cadena o una secuencia de memoria utilizando el método Load de la clase XamlReader.

+0

Gracias H.B., +1 por la información obsoleta. Seguiré buscando saber en qué casos tiene sentido usar FrameworkElementFactory con DataGrid. – akjoshi

+0

Uno de los propósitos es el rendimiento. Si tiene muchos controles con plantillas complejas, la creación de controles desde XAML es mucho más lenta que la creación desde el código. – TcKs

+0

@TcKs: Muéstreme sus datos empíricos, ya que no lo creeré, estamos hablando de plantillas aquí, los controles no se instancian hasta que se necesiten de todos modos. Si define una plantilla en código o en XAML no debería importar en absoluto, ambos se compilan a menos que utilice XAML suelto, que es poco probable. –

Cuestiones relacionadas