В чем разница между следующими спецификациями TargetType?
1 .
<Style TargetType="{x:Type Button}" ...
2 .
<Style TargetType="Button" ...
Кажется, оба работают нормально.
2 ответа
В первом примере расширение разметки Type
создает экземпляр Type
, указанный в данной строке, то есть Button
.
Во втором примере преобразователь типов, связанный со свойством TargetType
, преобразует строку "Button"
в требуемую Type
.
Оба дают одинаковый результат . Примечательно, что в Silverlight не существует расширения разметки Type
, поэтому возможно только (2).
Извините за такую старую ветку, но я чувствую, что оно того стоит. Недавно я столкнулся с ситуацией, которая показывает, что x:Type
отличается от TypeName-as-String
. По моему опыту -
x: Type учитывает строгое имя или версию сборки, но не TypeName-as-String .
Я объяснил свой сценарий и другие детали в моем блоге здесь -
Кроме того, существует разница в том, как WPF определяет тип. Для x: Type используется TypeExtension, тогда как для TypeName-as-String используется FrameworkElementFactory.
Согласно MSDN -
Свойства типа, поддерживающие Typename-as-String
WPF поддерживает методы, которые позволяют указывать значение некоторых свойств типа Type без необходимости использования расширения разметки x: Type. Вместо этого вы можете указать значение в виде строки, которая называет тип. Примерами этого являются ControlTemplate.TargetType и Style.TargetType. Поддержка такого поведения не обеспечивается ни преобразователями типов, ни расширениями разметки. Вместо этого это отложенное поведение, реализованное через FrameworkElementFactory.
http://msdn.microsoft.com/en-us/library/ms753322.aspx
Похожие вопросы
Связанные вопросы
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.