In WPF è possibile impostare TargetType
sul nome del tipo o impostarlo su {x:Type nameOfType}
.Differenza tra TargetType = "controlType" e TargetType = "{x: Type controlType}"
Qualcuno sa qual è la differenza?
In WPF è possibile impostare TargetType
sul nome del tipo o impostarlo su {x:Type nameOfType}
.Differenza tra TargetType = "controlType" e TargetType = "{x: Type controlType}"
Qualcuno sa qual è la differenza?
Niente. Poiché il tipo di proprietà è Type
, il parser XAML è in grado di provare e convertire qualsiasi cosa fornita a Type
. In altri scenari, il tipo di proprietà potrebbe essere meno specifico (ad esempio Object
), ed è qui che è necessaria l'estensione di markup, altrimenti il parser XAML interpreterà semplicemente il valore come String
.
Scusate per il frugare un filo così vecchio, ma sento che ne vale la pena. Recentemente ho riscontrato una situazione che mostra che x:Type
è diverso da TypeName-as-String
.
Dalla mia esperienza -
x:Type
considera il nome sicuro o la versione del gruppo, ma non TypeName-as-String
.
ho spiegato circa il mio scenario e altri dettagli nel mio blog qui -
Importance of specifying AncestorType with x:Type in RelativeSourceBinding
Oltre a questo, c'è anche differenza nel modo in WPF deduce il tipo. Per x:Type
TypeExtension
viene utilizzato, mentre per TypeName-as-String
FrameworkElementFactory
viene utilizzato.
Come per MSDN - x:Type Markup Extension
Proprietà del tipo che supportano typename-as-String
WPF supporta le tecniche che consentono di specificare il valore di alcuni proprietà di tipo tipo senza richiedere un
x:Type
markup estensione utilizzo. Invece, è possibile specificare il valore come una stringa che denomina il tipo . Esempi di questo sonoControlTemplate.TargetType
eStyle.TargetType
. Il supporto per questo comportamento non viene fornito tramite convertitori di tipi o estensioni di markup. Invece, si tratta di un comportamento di differimento implementato tramiteFrameworkElementFactory
.