Типы, перенесенные из WPF в System.Xaml
В платформе .NET Framework версий 3.0 и 3.5 как Windows Presentation Foundation (WPF), так и Windows Workflow Foundation включали реализацию языка XAML. Многие из открытых типов, которые обеспечивают расширение для реализации XAML в WPF, существовали в сборках WindowsBase PresentationCore и PresentationFramework. Аналогично, открытые типы, обеспечивающие расширение для XAML Windows Workflow Foundation, существовали в сборке System.Workflow.ComponentModel. В .NET Framework 4 некоторые типы , связанные с XAML, перенесены в сборку System.Xaml. Общая реализация служб языка XAML в .NET Framework поддерживает многие сценарии расширения XAML, которые первоначально определялись реализацией XAML конкретной платформы, а теперь в целом поддерживаются в .NET Framework 4. В этой статье перечислены перенесенные типы и обсуждаются вопросы, относящиеся к миграции.
Сборки и пространства имен
В платформе .NET Framework версий 3.0 и 3.5 типы, реализованные WPF для поддержки XAML, обычно находились в пространстве имен System.Windows.Markup. Большинство из них были включены в сборку WindowsBase.
В .NET Framework 4 появилось новое пространство имен System.Xaml и новая сборка System.Xaml. Многие типы, которые первоначально были реализованы для XAML WPF, теперь предоставляются в виде точек расширения или служб для любой реализации XAML. Чтобы сделать типы доступными для более общих сценариев, они были перенесены из исходной сборки WPF в сборку System.Xaml. Это позволяет реализовать сценарии расширения XAML без включения сборок других платформ (таких как WPF и Windows Workflow Foundation).
Большинство типов перенесенных типов остались в пространстве имен System.Windows.Markup . Частично это было вызвано желанием избежать нарушения сопоставлений пространств имен среды CLR в существующих реализациях для каждого файла. В результате пространство имен System.Windows.Markup в .NET Framework 4 содержит смесь общих типов поддержки языка XAML (из сборки System.Xaml) и типов, связанных с реализацией XAML в WPF (из WindowsBase и других сборок WPF). Любой тип, который был перенесены в сборку System.Xaml, но ранее существовал в сборке WPF, поддерживает перенаправление типов в 4 версии сборки WPF.
Типы поддержки XAML рабочего процесса
В Windows Workflow Foundation также доступны типы поддержки XAML, идентичные короткие имена которых во многих случаях эквиваленты именам в WPF. Далее приводится список типов XAML для Windows Workflow Foundation.
Эти типы поддержки по-прежнему существуют в сборках Windows Workflow Foundation для платформы .NET Framework 4 и по-прежнему могут использоваться для конкретных приложений Windows Workflow Foundation. Однако на них не должны ссылаться приложения или платформы, которые не используют Windows Workflow Foundation.
MarkupExtension
В платформе .NET Framework версий 3.0 и 3.5 класс MarkupExtension для WPF находился в сборке WindowsBase. Параллельный класс для Windows Workflow Foundation, MarkupExtension, размещался в сборке System.Workflow.ComponentModel. В .NET Framework 4 класс MarkupExtension перенесен в сборку System.Xaml. В .NET Framework 4 класс MarkupExtension предназначен для любого сценария расширения XAML, где используются службы XAML .NET, а не только для сценариев, связанных с конкретными платформами. Если это возможно, определенные платформы или пользовательский код в платформе также должны использовать класс MarkupExtension для расширения XAML.
Вспомогательные классы службы MarkupExtension
.NET Framework версий 3.0 и 3.5 для WPF предоставляли ряд служб, доступных для реализаций MarkupExtension и TypeConverter, для поддержки использования типа или свойства в XAML. Вот эти службы.
Примечание.
Другая служба из .NET Framework 3.5, связанная с расширениями разметки, — это интерфейс IReceiveMarkupExtension. IReceiveMarkupExtensionне был перенесен и помечен [Obsolete]
для платформы .NET Framework 4. Сценарии, в которых ранее использовался IReceiveMarkupExtension , следует применять обратные вызовы XamlSetMarkupExtensionAttribute с атрибутами. AcceptedMarkupExtensionExpressionTypeAttribute также помечен как [Obsolete]
.
Возможности языка XAML
Некоторые возможности и компоненты языка XAML для WPF были доступны ранее в сборке PresentationFramework. Они были реализованы как подкласс MarkupExtension для предоставления расширений разметки в XAML-разметке. В .NET Framework 4 они находятся в сборке System.Xaml, поэтому проекты, которые не включают сборки WPF, могут использовать эти возможности языка XAML. WPF применяет те же реализации для приложений .NET Framework 4. Как в других случаях, перечисленных в этом разделе, поддерживающие типы по-прежнему размещены в пространстве имен System.Windows.Markup , чтобы избежать повреждения прежних ссылок.
Следующая таблица содержит список классов поддержки XAML, определенных в сборке System.Xaml.
Возможность языка XAML | Использование |
---|---|
ArrayExtension | <x:Array ...> |
NullExtension | {x:Null} |
StaticExtension | {x:Static ...} |
TypeExtension | {x:Type ...} |
Хотя в сборке System.Xaml могут отсутствовать конкретные классы поддержки, общая логика обработки возможностей языка XAML теперь находится в сборке System.Xaml и реализованных средствах чтения и записи XAML. Например, x:TypeArguments
— это атрибут, который обрабатывается средствами чтения и записи XAML из реализаций System.XAML. Как можно заметить, в потоке узлов XAML предусмотрена обработка в контексте схемы XAML по умолчанию (на основе CLR), представление системы типов XAML и т. д. Дополнительные сведения о справочной документации по XAML см. в разделе Службы XAML.
ValueSerializer и классы поддержки
Класс ValueSerializer поддерживает преобразование типов в строку, в частности для сериализации XAML, для которой может потребоваться несколько режимов или узлов в выходных данных. В платформе .NET Framework версий 3.0 и 3.5 ValueSerializer для WPF находился в сборке WindowsBase. В .NET Framework 4 класс ValueSerializer находится в System.Xaml и предназначен для любого сценария расширения XAML, а не только для сценариев на основе WPF. IValueSerializerContext (поддерживающая служба) и DateTimeValueSerializer (конкретный подкласс) также перенесены в сборку System.Xaml.
Атрибуты, связанные с XAML
XAML в WPF содержал несколько атрибутов, которые можно было применять к типам CLR, чтобы указать что-то об их поведении в XAML. Ниже приведен список атрибутов, которые существуют в сборках WPF в платформах .NET Framework 3.5 и .NET Framework 3.0. В .NET Framework 4 они перенесены в System.Xaml.
Различные классы
В платформе .NET Framework версий 3.0 и 3.5 интерфейс IComponentConnector размещался в сборке WindowsBase, но в версии .NET Framework 4 он размещен в System.Xaml. IComponentConnector в основном предназначен для поддержки инструментария и компиляторов разметки XAML.
В платформе .NET Framework версий 3.0 и 3.5 интерфейс INameScope размещался в сборке WindowsBase, но в версии .NET Framework 4 он размещен в System.Xaml. INameScope определяет базовые операции для пространства имен XAML.
Классы с общими именами, связанные с XAML, которые существуют в WPF и System.Xaml
Следующие классы существуют в сборках WPF и в сборке System.Xaml в .NET Framework 4.
XamlReader
XamlWriter
XamlParseException
Реализация WPF находится в пространстве имен System.Windows.Markup и в сборке PresentationFramework. Реализация System.Xaml находится в пространстве имен System.Xaml . Если вы используете типы WPF или создаете производные типы от типов WPF, следует использовать реализации XamlReader и XamlWriter WPF вместо реализаций System.Xaml. Подробнее см. в разделе "Замечания" в System.Windows.Markup.XamlReader и System.Windows.Markup.XamlWriter.
Если вы указываете ссылки на сборки WPF и System.Xaml и используете операторы include
для пространств имен System.Windows.Markup и System.Xaml , вам может понадобиться полностью определить вызовы этих API, чтобы однозначно разрешить эти типы.
.NET Desktop feedback