Разница между TargetType = "controlType" и TargetType = "{x: Тип controlType}"
В WPF вы можете установить TargetType либо имя типа, либо вы можете установить его на {x:Type nameOfType}.
Кто-нибудь знает, в чем разница?
Ответ 1
Ничего. Поскольку тип свойства Type, анализатор XAML знает, как попытаться преобразовать все, что вы поставили в Type. В других сценариях тип свойства может быть менее конкретным (например, Object) и что там, где требуется расширение разметки, в противном случае анализатор XAML будет просто интерпретировать ваше значение как String.
Ответ 2
Извините за то, что выкалываете такой старый поток, но я считаю, что это того стоит. Я недавно столкнулся с ситуацией, которая показывает, что x:Type отличается от TypeName-as-String.
Из моего опыта -
x:Type рассматривает сильное имя или версию сборки, но не TypeName-as-String.
Я рассказал о своем сценарии и других деталях в моем блоге здесь -
Кроме того, существует также разница в том, как WPF вводит тип. Для x:TypeTypeExtension используется, тогда как для TypeName-as-StringFrameworkElementFactory используется.
Свойства типа, которые поддерживают Typename-as-String
WPF поддерживает методы, которые позволяют указать значение некоторых свойства типа Тип, не требуя расширения разметки x:TypeПрименение. Вместо этого вы можете указать значение как строку, которая называет тип. Примерами этого являются ControlTemplate.TargetType и Style.TargetType. Поддержка такого поведения не обеспечивается либо преобразователи типов, либо расширения разметки. Вместо этого это отложенное поведение осуществляется через FrameworkElementFactory.