.net - plantillas - wpf templates free
Diferencia entre TargetType="controlType" y TargetType="{x: Type controlType}" (3)
En WPF puede establecer TargetType
en el nombre del tipo o puede establecerlo en {x:Type nameOfType}
.
¿Alguien sabe cuál es la diferencia?
Además de la diferencia real descrita anteriormente, el uso de {x: Type NameOfType} obviamente se destacará de manera diferente en su IDE y lo destacará y detectará de inmediato (a diferencia de una cadena normal). Entonces esta es mi preferencia personal.
Nada. Dado que el tipo de propiedad es Type
, el analizador XAML sabe qué hacer para intentar convertir lo que le proporcione a un Type
. En otros escenarios, el tipo de propiedad puede ser menos específico (por ej., Object
), y ahí es donde necesita la extensión de marcado, de lo contrario, el analizador XAML simplemente interpretará su valor como una String
.
Perdón por haber metido un hilo tan viejo, pero siento que lo vale. Recientemente me encontré con una situación que muestra que x:Type
es diferente de TypeName-as-String
.
De acuerdo con mi experiencia -
x:Type
considera el nombre fuerte o la versión del ensamblado pero no TypeName-as-String
.
He explicado sobre mi escenario y otros detalles en mi blog aquí -
Importancia de especificar AncestorType con x: Escriba en RelativeSourceBinding
Aparte de esto, también hay diferencia en cómo WPF infiere el tipo. Para x:Type
se usa x:Type
TypeExtension
, mientras que para TypeName-as-String
FrameworkElementFactory
se usa.
Según MSDN - x: Tipo de extensión de marcado
Tipo Propiedades que admiten Typename-as-String
WPF admite técnicas que permiten especificar el valor de algunas propiedades del tipo Tipo sin requerir un uso de extensión
x:Type
marcado. En cambio, puede especificar el valor como una cadena que nombra el tipo. Ejemplos de esto sonControlTemplate.TargetType
yStyle.TargetType
. El soporte para este comportamiento no se proporciona a través de convertidores de tipo o extensiones de marcado. En cambio, este es un comportamiento diferido implementado a través deFrameworkElementFactory
.