2010-01-29 16 views
5

Si bien la definición de estilo en el diccionario de recursos puede utilizar cualquieraestilos WPF: diferencia entre x: Nombre y x: Tipo

x:Name="xyz" 

y

x:Type="xyz". 

y puede hacer referencia a este estilo en XAML como {StaticResource xyz}.

La mayoría de los ejemplos usan 'x: Key', y la diferencia entre 'name' y 'key' es que usar 'x: name' te permite usar este código de definición de definición de estilo?

CORREGIR: La pregunta es totalmente incorrecta. Lo que se pretendía era la diferencia entre x: Key y x: Name. Pero no fui a probar este código yo solo, sino que solo confiaba en los recuerdos; pensé que tenía los dos en ResourceDictionary, lo cual era incorrecto. Y tampoco tuve dicho código en

<xxx.Resources > 

secciones, ya que tampoco funciona. No puede hacer referencia a Style que no tiene x: Key (x: Name no funciona aquí) y agregar dos estilos sin x: Key arroja una excepción ya que ambos obtienen la misma clave (¿vacía?) En el diccionario.

Ray pone toda la diferencia de una manera muy agradable, gracias.
Mi error

+0

Esta es una pregunta trampa –

Respuesta

9

Esta es una pregunta con trampa . De hecho, no puede definir un estilo en una ResourceDictionary utilizando ya sea

x:Type="xyz" 

o

x:Name="xyz" 

Aquí está la diferencia:

  • x:Type="xyz" no es la sintaxis XAML válida.
  • x:Name="xyz" es en realidad una sintaxis XAML válida que nombra un objeto (que afecta la generación de código subyacente) pero no proporciona una clave de diccionario.
  • x:Key="xyz" también es válida la sintaxis XAML que proporciona una clave de diccionario, pero no nombra un objeto.

En un diccionario se requiere una clave, lo que debe especificar x:Key (excepto que para FrameworkTemplate y sus subclases la clave se puede inferir de la TargetType o tipo de datos). En un diccionario también puede especificar x:Name si así lo desea, pero no afecta la clave.

Tenga en cuenta que x:Type es una extensión de marcado que está predefinida por XAML, mientras que x:Name y x:Key son palabras clave XAML reales. Así x:Type sólo se puede utilizar en la sintaxis de extensión de marcado como el valor de una propiedad:

something="{x:Type whatever}" 

mientras que x:Name y x:Key son atributos que se pueden utilizar en los elementos.

+2

Es una pregunta de truco doble porque en realidad ** ninguno de ellos funciona **. No puede definir un estilo en un ResourceDictionary usando 'x: Name =" xyz "' tampoco. Solo x: la clave funciona. – itowlson

+0

¡No es broma! ¿Cómo extrañé eso? Y ahora, ¿qué voy a hacer? Eliminar mi respuesta? ¿Corregirlo? Creo que lo enmendaré. Gracias itowlson. –

+0

Gracias por su respuesta. Por favor, avíseme si debería eliminar esta pregunta, o edite su texto para que no sea complicado. – bybor

2

x: El nombre le permite crear una referencia que puede usar por nombre.

x: Tipo le permite crear una referencia que es utilizado por ese tipo

por ejemplo

<Style TargetType="{x:Type Button}"> 
    ... 
</Style> 

crea un estilo que afectará de forma automática botones

Cuestiones relacionadas