Я говорю о расширениях, таких как x:Reference
и x:FactoryMethod
, которые вместе появляются здесь. Я читаю много противоречивой информации в Интернете, в том числе в MSDN, Stackoverflow и других источниках.
В качестве примера я расскажу о x:Reference
, но я на самом деле ссылаюсь на другие расширения разметки. Основными причинами путаницы являются следующие выдержки из MSDN:
Поддержка языка XAML 2009 в WPF
В WPF вы можете использовать функции XAML 2009, но только для XAML, который не скомпилирован WPF. Компилируемая по методу XAML и форма BAML XAML в настоящее время не поддерживают ключевые слова и функции языка XAML 2009. Обратите внимание, что существующие методы загрузки потерянного XAML в WPF также имеют возможные ограничения безопасности и доступа для типов CLR и системы типов, которые являются более ограничительными, чем для скомпилированного XAML. Дополнительные сведения см. В разделе Безопасность (WPF) или Стратегия безопасности WPF - Безопасность платформы. XAML 2009 также вводит дополнительные функции, которые либо изменяют предыдущие конструкции XAML 2006, либо модифицируют основные формы разметки.
x: Расширение расширений ссылок
x: Ссылка - это конструкция, определенная в XAML 2009. В WPF вы можете использовать функции XAML 2009, но только для XAML, который не скомпилирован WPF. Компилируемая по методу XAML и форма BAML XAML в настоящее время не поддерживают ключевые слова и функции языка XAML 2009.
Однако следующий параграф появляется непосредственно перед предыдущим абзацем (т.е. о x:Reference
).
В WPF и XAML 2006 ссылки на элементы рассматриваются с помощью функции уровня элемента привязки ElementName. Для большинства приложений и сценариев WPF необходимо использовать привязку ElementName. Исключения из этого общего руководства могут включать случаи, когда есть контекст данных или другие соображения, которые делают невозможным привязку данных и где компиляция разметки не задействована.
Здесь нет прямого противоречия, но этот параграф, кажется, говорит, что в приложениях можно использовать x:Reference
. Кроме того, этот параграф о x:Reference
представляется автоматически сгенерированным и может быть устаревшим.
Тогда у нас есть следующая выдержка из книги "WPF 4 Unleashed":
Расширение разметки x: Reference часто ошибочно связано с XAML2009 функции, которые могут использоваться только из свободного XAML на момент написания этой статьи. Несмотря на то что x: Ссылка - это новая функция в WPF 4, ее можно использовать с XAML2006 просто отлично, пока ваш проект нацелен на версию 4 или более позднюю версию .NET Framework.
У нас также есть следующие вопросы Stackoverflow, некоторые с противоречивыми ответами, и ни один из них не является абсолютно правильным:
- Что было бы альтернативой x: Ссылка?
- XAML 2009 - x: Ссылка - Любая недостатка в использовании этого?
- Когда x: ссылка в WPF разрешена и почему порядок элемента XAML влияет на нее?
Наконец, я лично использовал расширение x:Reference
и, похоже, работает в приложениях WPF, независимо от того, что говорит MSDN, хотя Visual Studio иногда жалуется на странные вещи (или это может быть ReSharper), например, null reference исключения в разметке.
Знакомство с актуальными вопросами,
- Можно ли использовать XAML 2009 (полностью или частично) в приложениях WPF?
- Могут ли эти конкретные расширения использоваться при написании приложений WPF? Существуют ли ограничения в их использовании?
- Почему так много путаницы в отношении всего этого?