Migrazione da MRT a MRT Core

Questo argomento contiene indicazioni per la migrazione dal Sistema gestione risorse della piattaforma UWP (anche detto MRT) al sistema MRT Core di Windows App SDK.

MRT Core è una versione semplificata di MRT. Per altre informazioni, vedere Gestire le risorse con MRT Core.

Riepilogo delle differenze tra API e/o funzionalità

Per agevolare la migrazione, le API MRT Core sono molto simili alle API MRT. Per la documentazione di riferimento sulle API, vedere lo spazio dei nomi Microsoft.Windows.ApplicationModel.Resources.

Nota

Non tutte le API MRT esistono in MRT Core. Ma tutte le API necessarie per la funzionalità di base di MRT sono incluse.

Modificare lo spazio dei nomi

Nella piattaforma UWP, le API MRT si trovano nello spazio dei nomi Windows.ApplicationModel.Resources.Core. In Windows App SDK, le API MRT Core si trovano nello spazio dei nomi Microsoft.Windows.ApplicationModel.Resources. Sarà quindi necessario modificare il nome dello spazio dei nomi nel codice sorgente (aggiungere Microsoft. all'inizio e rimuovere l'elemento .Core alla fine).

Nota

In Windows App SDK 1.0 Anteprima 1 e versioni successive, le API MRT Core si trovano nello spazio dei nomi Microsoft.Windows.ApplicationModel.Resources. Nelle versioni precedenti, si trovano nello spazio dei nomi Microsoft.ApplicationModel.Resources.

Classe ResourceManager

Questa sezione si applica se si utilizza la proprietà Windows.ApplicationModel.Resources.Core.ResourceManager.Current nell'app 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() };

Invece, nell'app Windows App SDK, occorre creare un nuovo 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

La classe ResourceContext di MRT della piattaforma UWP distingue tra un ResourceContext per la visualizzazione attuale e uno da usare indipendentemente dalla visualizzazione.

Per la classe ResourceContext di MRT Core di Windows App SDK, l'app deve determinare il contesto corretto (valori di qualifica della risorsa, per cui non si applicano più i concetti di visualizzazione corrente e uso indipendente dalla visualizzazione.

Valori di qualifica della risorsa

In MRT della piattaforma UWP i valori di qualifica del contesto della risorsa vengono determinati per l'app. Mentre in MRT Core, viene popolato solo il valore della lingua. L'app deve determinare gli altri valori autonomamente. Ecco un esempio, in cui si presuppone che la visualizzazione XAML contenga un elemento denominato 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") };

Modifica del valore di qualifica della risorsa

MRT della piattaforma UWP fornisce l'evento ResourceQualifierObservableMap.MapChanged . Questa sezione si applica se l'app UWP gestisce l'evento in modo da ascoltare le modifiche apportate al valore di qualifica.

MRT Core non fornisce meccanismi di notifica relativi alle modifiche dell'ambiente. Pertanto, l'app Windows App SDK deve rilevare tali modifiche autonomamente se si desidera aggiornare le risorse in base alle modifiche dell'ambiente.

Un'app di esempio MRT Core

Vedere anche il progetto di app di esempio Caricare le risorse usando MRT Core ), che illustra come usare la superficie dell'API MRT Core.