Tipos migrados do WPF para System.Xaml
No .NET Framework 3.5 e no .NET Framework 3.0, tanto o Windows Presentation Foundation (WPF) quanto o Windows Workflow Foundation incluíram uma implementação de linguagem XAML. Muitos dos tipos públicos que forneceram extensibilidade para a implementação de XAML do WPF existiam nos assemblies WindowsBase, PresentationCore e PresentationFramework. Da mesma forma, os tipos públicos que forneceram extensibilidade para o XAML do Windows Workflow Foundation existiam no assembly System.Workflow.ComponentModel. No .NET Framework 4, alguns dos tipos relacionados a XAML foram migrados para o assembly System.Xaml. Uma implementação comum do .NET Framework de serviços de linguagem XAML permite muitos cenários de extensibilidade XAML que foram originalmente definidos pela implementação XAML de uma estrutura específica, mas agora fazem parte do suporte geral à linguagem XAML do .NET Framework 4. Este artigo lista os tipos que foram migrados e discute problemas relacionados à migração.
Assemblies e namespaces
No .NET Framework 3.5 e no .NET Framework 3.0, os tipos que o WPF implementou para dar suporte ao XAML geralmente estavam no namespace System.Windows.Markup. A maioria desses tipos estava no assembly do WindowsBase.
No .NET Framework 4, há um novo namespace System.Xaml e um novo assembly System.Xaml. Muitos dos tipos que foram originalmente implementados para WPF XAML agora são fornecidos como pontos de extensibilidade ou serviços para qualquer implementação de XAML. Como parte de torná-los disponíveis para cenários mais gerais, os tipos são redirecionados do assembly WPF original para o assembly System.Xaml. Isso permite cenários de extensibilidade XAML sem precisar incluir os assemblies de outras estruturas (como WPF e Windows Workflow Foundation).
Para tipos migrados, a maioria dos tipos permanece no namespace System.Windows.Markup. Isso foi parcialmente para evitar a quebra de mapeamentos de namespace CLR em implementações existentes por arquivo. Como resultado, o namespace System.Windows.Markup no .NET Framework 4 contém uma mistura de tipos gerais de suporte à linguagem XAML (do assembly System.Xaml) e tipos específicos para a implementação do WPF XAML (do WindowsBase e outros assemblies do WPF). Qualquer tipo que foi migrado para o System.Xaml, mas existia anteriormente em um assembly do WPF, possui suporte para encaminhamento de tipo na versão 4 do assembly do WPF.
Tipos de suporte XAML de fluxo de trabalho
O Windows Workflow Foundation também forneceu tipos de suporte XAML e, em muitos casos, eles tinham nomes curtos idênticos a um equivalente do WPF. Veja a seguir uma lista de tipos de suporte XAML do Windows Workflow Foundation:
Esses tipos de suporte ainda existem nos assemblies do Windows Workflow Foundation para .NET Framework 4 e ainda podem ser usados para aplicativos específicos do Windows Workflow Foundation; no entanto, eles não devem ser referenciados por aplicativos ou estruturas que não usam o Windows Workflow Foundation.
MarkupExtension
No .NET Framework 3.5 e no .NET Framework 3.0, a classe MarkupExtension para WPF estava no assembly do WindowsBase. Uma classe paralela do Windows Workflow Foundation, MarkupExtension, existia no assembly System.Workflow.ComponentModel. No .NET Framework 4, a classe MarkupExtension é migrada para o assembly System.Xaml. No .NET Framework 4, MarkupExtension destina-se a qualquer cenário de extensibilidade XAML que use os Serviços XAML do .NET, não apenas para aqueles que se baseiam em estruturas específicas. Quando possível, estruturas específicas ou código de usuário na estrutura também devem se basear na classe MarkupExtension para a extensão XAML.
Suporte para classes de serviço MarkupExtension
O .NET Framework 3.5 e o .NET Framework 3.0 para WPF forneceram vários serviços disponíveis para implementadores MarkupExtension e implementações TypeConverter para dar suporte ao uso de tipo/propriedade no XAML. Esses serviços são os seguintes:
Nota
Outro serviço do .NET Framework 3.5 relacionado a extensões de marcação é a interface IReceiveMarkupExtension. IReceiveMarkupExtension não foi migrado e está marcado como [Obsolete]
para o .NET Framework 4. Os cenários que anteriormente usavam IReceiveMarkupExtension devem agora usar chamadas de retorno atribuídas XamlSetMarkupExtensionAttribute. AcceptedMarkupExtensionExpressionTypeAttribute também está marcado como [Obsolete]
.
Recursos de linguagem XAML
Vários recursos e componentes de linguagem XAML para WPF existiam anteriormente no assembly PresentationFramework. Foram implementadas como uma subclasse MarkupExtension para revelar o uso de extensões de marcação na marcação XAML. No .NET Framework 4, eles existem no assembly System.Xaml para que projetos que não incluam assemblies WPF possam usar esses recursos no nível da linguagem XAML. O WPF usa essas mesmas implementações para aplicativos do .NET Framework 4. Assim como acontece com os outros casos listados neste tópico, os tipos de suporte continuam a existir no namespace System.Windows.Markup para evitar a quebra de referências anteriores.
A tabela a seguir contém uma lista das classes de suporte a recursos XAML definidas no System.Xaml.
Recurso de linguagem XAML | Uso |
---|---|
ArrayExtension | <x:Array ...> |
NullExtension | {x:Null} |
StaticExtension | {x:Static ...} |
TypeExtension | {x:Type ...} |
Embora o System.Xaml possa não ter classes de suporte específicas, a lógica geral para processar recursos de linguagem para a linguagem XAML agora reside em System.Xaml e seus leitores XAML implementados e gravadores XAML. Por exemplo, x:TypeArguments
é um atributo que é processado por leitores e gravadores XAML das implementações do System.Xaml; ele pode ser observado no fluxo de nós XAML, possui tratamento no contexto de esquema XAML padrão (baseado em CLR), tem uma representação no sistema de tipos XAML, e assim por diante. Para obter mais informações sobre a documentação de referência para XAML, consulte serviços XAML.
ValueSerializer e Classes de Suporte
A classe ValueSerializer dá suporte à conversão de tipo para uma string, especialmente para casos de serialização XAML onde a serialização pode exigir vários modos ou nós na saída. No .NET Framework 3.5 e no .NET Framework 3.0, o ValueSerializer para WPF estava no assembly do WindowsBase. No .NET Framework 4, a classe ValueSerializer está em System.Xaml e destina-se a qualquer cenário de extensibilidade XAML, não apenas para aqueles que se baseiam no WPF. IValueSerializerContext (um serviço de suporte) e DateTimeValueSerializer (uma subclasse específica) também são migrados para System.Xaml.
Atributos de XAML-Related
O WPF XAML incluiu vários atributos que podem ser aplicados a tipos CLR para indicar algo sobre seu comportamento XAML. Veja a seguir uma lista dos atributos que existiam em assemblies do WPF no .NET Framework 3.5 e no .NET Framework 3.0. Esses atributos são migrados para System.Xaml no .NET Framework 4.
Classes diversas
A interface IComponentConnector existia no WindowsBase no .NET Framework 3.5 e no .NET Framework 3.0, mas existe no System.Xaml no .NET Framework 4. IComponentConnector destina-se principalmente ao suporte a ferramentas e compiladores de marcação XAML.
A interface INameScope existia no WindowsBase no .NET Framework 3.5 e no .NET Framework 3.0, mas existe no System.Xaml no .NET Framework 4. INameScope define operações básicas para um namescope XAML.
Classes relacionadas a XAML com nomes compartilhados que existem no WPF e no System.Xaml
As seguintes classes existem tanto nos assemblies do WPF quanto no assembly System.Xaml no .NET Framework 4:
XamlReader
XamlWriter
XamlParseException
A implementação do WPF é encontrada no namespace System.Windows.Markup e no assembly PresentationFramework. A implementação de System.Xaml é encontrada no namespace System.Xaml. Se você estiver usando tipos WPF ou estiver derivando de tipos WPF, normalmente deverá usar as implementações do WPF de XamlReader e XamlWriter em vez das implementações system.Xaml. Para obter mais informações, consulte Comentários em System.Windows.Markup.XamlReader e System.Windows.Markup.XamlWriter.
Se você estiver incluindo referências a assemblies WPF e System.Xaml e também estiver usando instruções include
para os namespaces System.Windows.Markup e System.Xaml, talvez seja necessário qualificar completamente as chamadas para essas APIs para resolver os tipos de forma não ambígua.
.NET Desktop feedback