.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:Typemarcado. En cambio, puede especificar el valor como una cadena que nombra el tipo. Ejemplos de esto sonControlTemplate.TargetTypeyStyle.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.