W WPF można ustawić TargetType
na nazwę typu lub można ustawić ją na {x:Type nameOfType}
.Różnica między TargetType = "controlType" a TargetType = "{x: Typ controlType}"
Czy ktoś wie jaka to różnica?
W WPF można ustawić TargetType
na nazwę typu lub można ustawić ją na {x:Type nameOfType}
.Różnica między TargetType = "controlType" a TargetType = "{x: Typ controlType}"
Czy ktoś wie jaka to różnica?
Nic. Ponieważ typem właściwości jest Type
, parser XAML wie, aby spróbować przekonwertować wszystko, co dostarczasz, na Type
. W innych przypadkach typ właściwości może być mniej specyficzny (np. Object
) i tam trzeba rozszerzyć znacznik, w przeciwnym razie analizator składni XAML po prostu interpretuje wartość jako String
.
Przepraszamy za szturchanie tak starej nitki, ale czuję, że warto. Ostatnio napotkałem sytuację, która pokazuje, że x:Type
jest inny od TypeName-as-String
.
Z mojego doświadczenia -
x:Type
uważa silną nazwę lub wersję zespołu, ale nie TypeName-as-String
.
wyjaśniłem o moim scenariuszu i inne szczegóły na moim blogu tutaj -
Importance of specifying AncestorType with x:Type in RelativeSourceBinding
Oprócz tego, istnieje również różnica w jaki sposób WPF wnioskuje typ. Do użycia jest x:Type
TypeExtension
, natomiast w przypadku TypeName-as-String
FrameworkElementFactory
jest używany.
Zgodnie z MSDN - x:Type Markup Extension
Rodzaj własności, które wsparcie TypeName-as-String
WPF obsługuje techniki, które umożliwiają podanie wartości niektórych właściwości typu typ bez konieczności
x:Type
znaczników rozszerzenie użytkowania. Zamiast tego można podać wartość jako ciąg znaków o nazwie typu . Przykładami sąControlTemplate.TargetType
iStyle.TargetType
. Obsługa tego zachowania nie jest zapewniana przez konwertery typów ani rozszerzenia znaczników. Zamiast tego jest to zachowanie polegające na odroczeniu za pośrednictwemFrameworkElementFactory
.