2011-02-13 12 views
22

Tengo control personalizado que se extiende DataGrid. Se llama ExtendedDataGrid. Quiero proporcionar estilo para ExtendedDataGrid que es el mismo que el estilo de DataGrid, excepto que cambia la plantilla. He intentado algo como esto:¿Cómo crear estilos basados ​​en el estilo DataGrid predeterminado?

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}"> 
    <Setter Property="Template"> 
    ... 
    </Setter> 
</Style> 

Pero dice que el recurso no se encuentra.

así que trato:

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {ComponentResourceKey ResourceId=DataGridStyle, TypeInTargetAssembly={x:Type DataGrid}}}"> 
    <Setter Property="Template"> 
    ... 
    </Setter> 
</Style> 

Pero también no funciona ... Entonces, ¿qué hago?

Respuesta

44

Bueno misterio está resuelto :)

Mi primer código anterior funciona realmente:

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}"> 
    <Setter Property="Template"> 
    ... 
    </Setter> 
</Style> 

pensé que no está funcionando becase VS (o ReSharper) mostró error en mi código es decir que los recursos no encontrado ... Error en VS (o Resharper) :(

+0

-.- pensé, ¿usa el diseñador? –

+0

Sí, lo uso ¿por qué lo preguntas? – drasto

+8

Porque es una porquería que nadie debería usar a menos que tengan una buena excusa (no saber cómo escribir XAML no es una: P), a menudo afirma que algo no funciona mientras que realmente lo hace. –

2

Si crea un estilo con una propiedad TargetType y basarlo en otro estilo que también define una propiedad TargetType, el tipo de destino del estilo derivado debe ser el mismo como o desprenderse de la tipo del estilo de base .

Su grilla hereda de DataGrid, ¿verdad?

+0

Sí, lo hace. Problema resuelto, ver mi respuesta anterior :) – drasto

+0

Me preguntaba qué podría pasar si no fuera porque, como habrás notado, funciona. –

Cuestiones relacionadas