Migration de MRT vers MRT Core

Cette rubrique contient des conseils pour la migration du système de gestion des ressources d’UWP (également appelé MRT) vers le MRT Core de l’Windows App SDK.

MRT Core est une version simplifiée de MRT. Pour plus d’informations, consultez Gérer les ressources avec MRT Core.

Résumé des différences d’API et/ou de fonctionnalités

Pour faciliter la migration, les API MRT Core sont très similaires aux API MRT. Pour obtenir la documentation de référence sur les API, consultez l’espace de noms Microsoft.Windows.ApplicationModel.Resources.

Notes

Toutes les API MRT n’existent pas dans MRT Core. Mais toutes les API nécessaires pour les fonctionnalités de base de MRT sont incluses.

Modifier l’espace de noms

Dans UWP, les API MRT se trouvent dans l’espace de noms Windows.ApplicationModel.Resources.Core . Dans le Windows App SDK, les API MRT Core se trouvent dans l’espace de noms Microsoft.Windows.ApplicationModel.Resources. Vous devez donc modifier ce nom d’espace de noms dans votre code source (ajoutez Microsoft. au début et supprimez le .Core à la fin).

Notes

Dans Windows App SDK 1.0 Preview 1 et versions ultérieures, les API MRT Core se trouvent dans l’espace de noms Microsoft.Windows.ApplicationModel.Resources. Dans les versions antérieures, ils se trouvent dans l’espace de noms Microsoft.ApplicationModel.Resources .

Classe ResourceManager

Cette section s’applique si vous utilisez la propriété Windows.ApplicationModel.Resources.Core.ResourceManager.Current dans votre application 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() };

Au lieu de cela, dans votre application Windows App SDK, créez un 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 et ResourceContext.GetForViewIndependentUse

La classe MRT ResourceContext d’UWP fait la distinction entre un ResourceContext pour la vue actuelle et un pour une utilisation indépendante de l’affichage.

Pour la classe MRT Core ResourceContext du Windows App SDK, votre application doit déterminer le contexte correct (valeurs de qualificateur de ressource) et les concepts d’affichage actuel et d’utilisation indépendante de l’affichage ne s’appliquent plus.

Valeurs de qualificateur de ressource

Dans le MRT d’UWP, les valeurs du qualificateur de contexte de ressource sont déterminées pour l’application. Dans MRT Core, seule la valeur de langue est renseignée. Votre application doit déterminer d’autres valeurs pour elle-même. Voici un exemple, où votre vue XAML est supposée contenir un élément nommé 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") };

Modification de la valeur du qualificateur de ressource

Le MRT d’UWP fournit l’événement ResourceQualifierObservableMap.MapChanged . Et cette section s’applique si votre application UWP gère cet événement afin d’écouter les modifications de valeur de qualificateur.

MRT Core ne fournit aucun mécanisme de notification concernant les modifications d’environnement. Par conséquent, votre application Windows App SDK doit détecter ces modifications par elle-même si vous souhaitez mettre à jour les ressources en fonction des modifications apportées à l’environnement.

Exemple d’application MRT Core

Consultez également l’exemple de projet d’application Charger des ressources à l’aide de MRT Core , qui montre comment utiliser la surface de l’API MRT Core.