Migração do MRT para o MRT Core

Este tópico contém diretrizes para migrar do Sistema de Gerenciamento de Recursos da UWP (também conhecido como MRT) para o MRT Core do SDK do Aplicativo 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 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 esse nome de namespace no código-fonte (adicione Microsoft. no início e remova o .Core no final).

Observação

No SDK do Aplicativo Windows versão prévia 1.0 e versões posteriores, as APIs do MRT Core estão no namespace Microsoft.Windows.ApplicationModel.Resources. Em versões anteriores a essa, elas 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 MRT ResourceContext da UWP distingue entre um ResourceContext para a exibição atual e outro para uso independente de exibição.

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

Valores do qualificador de recursos

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 supõe-se que sua exibição XAML contém 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 o aplicativo UWP está tratando esse evento para ouvir as alterações de valor do qualificador.

O MRT Core não fornece nenhuma mecânica de notificação em relação às 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 em alterações de ambiente.

Um aplicativo de exemplo do MRT Core

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