En WPF puede establecer TargetType
en el nombre del tipo o puede configurarlo en {x:Type nameOfType}
.Diferencia entre TargetType = "controlType" y TargetType = "{x: Type controlType}"
¿Alguien sabe cuál es la diferencia?
En WPF puede establecer TargetType
en el nombre del tipo o puede configurarlo en {x:Type nameOfType}
.Diferencia entre TargetType = "controlType" y TargetType = "{x: Type controlType}"
¿Alguien sabe cuál es la diferencia?
Nada. Dado que el tipo de propiedad es Type
, el analizador XAML sabe que debe intentar convertir lo que proporcione a un Type
. En otros escenarios, el tipo de propiedad puede ser menos específico (por ejemplo, Object
), y allí es donde necesita la extensión de marcado, de lo contrario, el analizador XAML simplemente interpretará su valor como String
.
Lo siento por pinchar un hilo tan viejo, pero siento que lo vale. Recientemente he encontrado una situación que muestra que x:Type
es diferente de TypeName-as-String
.
Desde mi experiencia -
x:Type
considera el nombre seguro o la versión del ensamblado pero no TypeName-as-String
.
he explicado en mi escenario y otros detalles en mi blog aquí -
Importance of specifying AncestorType with x:Type in RelativeSourceBinding
Aparte de esto, también hay diferencia en la forma de WPF infiere el tipo. Para x:Type
TypeExtension
se usa, mientras que para TypeName-as-String
FrameworkElementFactory
se utiliza.
Según MSDN - x:Type Markup Extension
tipo que apoyan typename-como-Cadena
WPF es compatible con las técnicas que permiten especificar el valor de algunos inmuebles del tipo Tipo sin necesidad de un marcado
x:Type
extensión uso. En su lugar, 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 del , ya sea que escriba convertidores o extensiones de marcado. En cambio, este es un comportamiento de diferimiento implementado a través delFrameworkElementFactory
.