Подтвердить что ты не робот

Разница между TargetType = "controlType" и TargetType = "{x: Тип controlType}"

В WPF вы можете установить TargetType либо имя типа, либо вы можете установить его на {x:Type nameOfType}.

Кто-нибудь знает, в чем разница?

4b9b3361

Ответ 1

Ничего. Поскольку тип свойства Type, анализатор XAML знает, как попытаться преобразовать все, что вы поставили в Type. В других сценариях тип свойства может быть менее конкретным (например, Object) и что там, где требуется расширение разметки, в противном случае анализатор XAML будет просто интерпретировать ваше значение как String.

Ответ 2

Извините за то, что выкалываете такой старый поток, но я считаю, что это того стоит. Я недавно столкнулся с ситуацией, которая показывает, что x:Type отличается от TypeName-as-String.

Из моего опыта -

x:Type рассматривает сильное имя или версию сборки, но не TypeName-as-String.

Я рассказал о своем сценарии и других деталях в моем блоге здесь -

Значение указания AncestorType с x: Введите RelativeSourceBinding

Кроме того, существует также разница в том, как WPF вводит тип. Для x:Type TypeExtension используется, тогда как для TypeName-as-String FrameworkElementFactory используется.

В соответствии с MSDN - x: Расширение разметки типов

Свойства типа, которые поддерживают Typename-as-String

WPF поддерживает методы, которые позволяют указать значение некоторых свойства типа Тип, не требуя расширения разметки x:TypeПрименение. Вместо этого вы можете указать значение как строку, которая называет тип. Примерами этого являются ControlTemplate.TargetType и Style.TargetType. Поддержка такого поведения не обеспечивается либо преобразователи типов, либо расширения разметки. Вместо этого это отложенное поведение осуществляется через FrameworkElementFactory.