Partilhar 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 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 MRT estão no namespace Windows.ApplicationModel.Resources.Core. No SDK de Aplicativos Windows, as APIs 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 Windows App SDK 1.0 Preview 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 de Aplicativos 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 o modo de exibição atual e um para uso independente do modo de exibição.

Para a classe MRT Core ResourceContext do SDK de Aplicativos Windows, seu aplicativo precisa determinar o contexto correto (valores de qualificador de recurso) e os conceitos de modo 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 de qualificador de contexto de recurso são determinados para o aplicativo. Enquanto no MRT Core, somente o valor do idioma é preenchido. Seu aplicativo precisa determinar outros valores para si mesmo. Aqui está um exemplo, onde se presume que sua 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 recursos

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 de Aplicativos Windows precisa detectar essas alterações por conta própria se você deseja atualizar recursos com base em alterações de ambiente.

Um aplicativo de exemplo MRT Core

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