Ответ 1
Я начну с конца:
Why is there so much confusion regarding all of this?
Возможно, потому, что до сих пор, включая версию WPF 4.5, почти полностью отсутствовала поддержка XAML 2009. Цитата Freestyle из книги Matthew MacDonald WPF 4.5, Chapter 2
:
Минимальное улучшение
XAML 2009
все еще не реализовано полностью. Они поддерживают только несвязанные файлы XAML, но не тип ресурсаPage
(скомпилированный ресурс), которые используются повсеместно. Вероятно,XAML 2009
никогда не будет полностью интегрированной частью WPF, поскольку он обеспечивает улучшения, особенно неважные, и поскольку любое изменение в компиляторе XAML создает проблемы безопасности и производительности.
Что касается будущего XAML 2009, то мы не можем точно сказать, когда он будет полностью поддерживать, но мы знаем, что на данный момент его не существует.
Can these specific extensions be used in writing WPF applications? Are there any limitations in using them?
Да, некоторые расширения могут использоваться в WPF 4.0 и WPF 4.5, например: x:Array
и другие типы, а также x:Reference
, x:FactoryMethod
. Я лично использую типы в XAML 2009 и не заметил никаких ошибок.
О x:Reference
можно сказать, что в Visual Studio 2010
он не работает так, как должен: при использовании x:Reference
в качестве цели некоторого Control
дизайнер Visual Studio генерирует исключение InvalidOperationException
с сообщение:
Поставщику услуг отсутствует служба INameResolver.
Проект будет компилироваться и выполняться без каких-либо проблем, но холст Design
, где отображается x:Reference
, будет отключен из-за исключения. Лично у меня это иногда появляется, иногда нет, но его следует игнорировать.
Но я почти точно знаю, что в версии WPF 4.5 и, возможно, для Visual Studio больше, чем в 2010 году, эта ошибка исправлена. Для получения дополнительной информации см. link
.
О x:FactoryMethod
здесь тоже, не все прошло гладко, для меня в WPF 4.0 программа VisualStudio 2010 не скомпилирована с ней. Был также создан отчет об ошибке connect.microsoft.com
, но представители Microsoft сказали, что:
Команда WPF недавно рассмотрела эту проблему и не будет решать эту проблему, поскольку в это время команда фокусируется на ошибках, влияющих на наибольшее количество разработчиков WPF. Если вы считаете, что это было устранено по ошибке, активируйте эту ошибку с любыми необходимыми поддерживающими данными.
Can XAML 2009 be used (in whole or in part) in WPF applications?
Определенный ответ: частично можно использовать, но, возможно, не для каждой версии WPF и Visual Studio.
Если ваш проект планируется в будущем портировать в версию WPF, 4.0 или более поздней версии, или на других платформах, таких как Silverlight, Windows Phone, я думаю, лучше избегать XAML 2009, потому что нет гарантии, что они будут такими, по крайней мере частично поддерживаемыми. Например, в Silverlight
в XAML 2009 поддержка отсутствует, даже XAML 2006 не поддерживается полностью. Может быть, значительная часть проекта может зависеть от XAML 2009, поэтому придется потратить определенное количество времени и ресурсов, чтобы избавиться от этой зависимости. В этой ситуации лучше использовать более универсальные решения.
Если вы используете WPF 4.0 и выше, и нет плана, перенесенного на другие платформы, я думаю, что частично можно будет использовать XAML 2009 после его тестирования.
Для получения дополнительной информации я рекомендую ознакомиться с нотами XAML 2009: