Compartilhar via


Migração do MRT para MRT Core

Este tópico contém orientações para migrar do Sistema de Gerenciamento de Recursos da UWP (também conhecido como MRT) para o MRT Core do SDK de Aplicativo do Windows.

O MRT Core é uma versão simplificada do MRT. Para obter mais informações, consulte Gerenciar recursos com o MRT Core.

Resumo das diferenças de API e/ou recursos

Para facilitar a migração, as APIs do MRT Core são muito semelhantes às APIs do MRT. Para obter a documentação de referência da API, consulte o namespace Microsoft.Windows.ApplicationModel.Resources.

Observação

Nem todas as APIs do MRT existem no MRT Core. Mas todas as APIs necessárias para a funcionalidade básica do MRT estão incluídas.

Alterar namespace

Na UWP, as APIs do MRT estão no namespace Windows.ApplicationModel.Resources.Core. No SDK do Aplicativo Windows, as APIs do MRT Core estão no namespace Microsoft.Windows.ApplicationModel.Resources. Portanto, você precisará alterar o nome do namespace em seu código-fonte (adicione Microsoft. no início e remova o .Core no final).

Observação

No SDK do Aplicativo Windows 1.0 Versão Prévia 1 e versões posteriores, as APIs do MRT Core estão no namespace Microsoft.Windows.ApplicationModel.Resources. Em versões anteriores a isso, eles estão no namespace Microsoft.ApplicationModel.Resources .

Classe ResourceManager

Esta seção se aplica se você estiver usando a propriedade Windows.ApplicationModel.Resources.Core.ResourceManager.Current em seu aplicativo UWP.

// In a UWP app
using Windows.ApplicationModel.Resources.Core;
...
var currentResourceManager = ResourceManager.Current;
// In a UWP app
#include <winrt/Windows.ApplicationModel.Resources.Core.h>
using namespace winrt::Windows::ApplicationModel::Resources::Core;
...
auto currentResourceManager{ ResourceManager::Current() };

Em vez disso, em seu aplicativo SDK do Aplicativo Windows, crie um novo Microsoft.Windows.ApplicationModel.Resources.ResourceManager.

// In a Windows App SDK app
using Microsoft.Windows.ApplicationModel.Resources;
...
var currentResourceManager = new ResourceManager();
// In a Windows App SDK app
#include <winrt/Microsoft.Windows.ApplicationModel.Resources.h>
using namespace winrt::Microsoft::Windows::ApplicationModel::Resources;
...
ResourceManager currentResourceManager;

ResourceContext.GetForCurrentView e ResourceContext.GetForViewIndependentUse

A classe ResourceContext do MRT da UWP distingue entre um ResourceContext para a exibição atual e um para uso independente de exibição.

Para a classe ResourceContext do MRT Core SDK do Aplicativo Windows, seu aplicativo precisa determinar o contexto correto (valores de qualificador de recurso) e os conceitos de exibição atual e uso independente de exibição não se aplicam mais.

Valores do qualificador de recurso

No MRT da UWP, os valores do qualificador de contexto de recurso são determinados para o aplicativo. Enquanto estiver no MRT Core, somente o valor do idioma é preenchido. Seu aplicativo precisa determinar outros valores para si mesmo. Aqui está um exemplo, em que se supõe que seu modo de exibição XAML contenha um elemento chamado layoutRoot.

// In a Windows App SDK app
using Microsoft.Windows.ApplicationModel.Resources;
...
var currentResourceManager = new ResourceManager();
var resourceContext = currentResourceManager.CreateResourceContext();
int scaleFactor = Convert.ToInt32(layoutRoot.XamlRoot.RasterizationScale * 100);
resourceContext.QualifierValues[KnownResourceQualifierName.Scale] = scaleFactor.ToString();
string s = resourceContext.QualifierValues[KnownResourceQualifierName.Scale];
// In a Windows App SDK app
#include <winrt/Microsoft.Windows.ApplicationModel.Resources.h>
using namespace winrt::Microsoft::Windows::ApplicationModel::Resources;
...
ResourceManager currentResourceManager;
auto resourceContext{ currentResourceManager.CreateResourceContext() };
auto scaleFactor{ layoutRoot().XamlRoot().RasterizationScale() * 100 };
resourceContext.QualifierValues().Insert(L"Scale", std::to_wstring((int)scaleFactor));
auto s{ resourceContext.QualifierValues().Lookup(L"Scale") };

Alteração do valor do qualificador de recurso

O MRT da UWP fornece o evento ResourceQualifierObservableMap.MapChanged. E esta seção se aplica se seu aplicativo UWP estiver manipulando esse evento para ouvir as alterações de valor do qualificador.

O MRT Core não fornece nenhuma mecânica de notificação sobre alterações de ambiente. Portanto, seu aplicativo SDK do Aplicativo Windows precisa detectar essas alterações por conta própria se você quiser atualizar recursos com base nas alterações do ambiente.

Um aplicativo de exemplo do MRT Core

Consulte também o projeto de aplicativo de exemplo Carregar recursos usando o MRT Core , que demonstra como usar a superfície da API do MRT Core.