Migration von MRT zu MRT Core

Dieses Thema enthält Anleitungen für die Migration vom UWP-Ressourcenverwaltungssystem (auch als MRT bezeichnet) zum MRT Core des Windows App SDK.

MRT Core ist eine optimierte Version von MRT. Weitere Informationen finden Sie unter Verwalten von Ressourcen mit MRT Core.

Zusammenfassung der API- und/oder Funktionsunterschiede

Für eine einfache Migration sind MRT Core-APIs sehr ähnlich wie MRT-APIs. Api-Referenzdokumentation finden Sie im Namespace "Microsoft.Windows.ApplicationModel.Resources".

Hinweis

Nicht alle MRT-APIs sind in MRT Core vorhanden. Alle APIs, die für die grundlegende Funktionalität von MRT erforderlich sind, sind jedoch enthalten.

Namespace ändern

In UWP befinden sich die MRT-APIs im Windows.ApplicationModel.Resources.Core-Namespace. Im Windows App SDK befinden sich die MRT Core-APIs im Namespace "Microsoft.Windows.ApplicationModel.Resources ". Daher müssen Sie diesen Namespacenamen in Ihrem Quellcode ändern (am Anfang hinzufügen Microsoft. und das .Core Ende entfernen).

Hinweis

In Windows App SDK 1.0 Preview 1 und höher befinden sich MRT Core-APIs im Namespace "Microsoft.Windows.ApplicationModel.Resources ". In früheren Versionen befinden sie sich im Namespace "Microsoft.ApplicationModel.Resources ".

ResourceManager-Klasse

Dieser Abschnitt gilt, wenn Sie die Eigenschaft "Windows.ApplicationModel.Resources.Core.ResourceManager.Current" in Ihrer UWP-App verwenden.

// 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() };

Erstellen Sie stattdessen in Ihrer Windows App SDK-App eine neue 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 und ResourceContext.GetForViewIndependentUse

Die MRT ResourceContext-Klasse von UWP unterscheidet zwischen einem ResourceContext für die aktuelle Ansicht und einer für die ansichtsunabhängige Verwendung.

Für die MRT Core ResourceContext-Klasse des Windows App SDK muss Ihre App den richtigen Kontext (Ressourcenqualifiziererwerte) ermitteln, und die Konzepte der aktuellen Ansichts- und Ansichtsunabhängigen Verwendung gelten nicht mehr.

Ressourcenqualifiziererwerte

Im MRT der UWP werden die Ressourcenkontextqualifiziererwerte für die App bestimmt. Während in MRT Core wird nur der Sprachwert aufgefüllt. Ihre App muss andere Werte für sich selbst bestimmen. Hier ist ein Beispiel, in dem angenommen wird, dass Ihre XAML-Ansicht ein Element namens layoutRoot enthält.

// 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") };

Änderung des Ressourcenqualifizierers

Das MRT der UWP stellt das ResourceQualifierObservableMap.MapChanged-Ereignis bereit. Und dieser Abschnitt gilt, wenn Ihre UWP-App dieses Ereignis behandelt, um auf Qualifiziererwertänderungen zu lauschen.

MRT Core bietet keine Benachrichtigungsmechanik für Umgebungsänderungen. Daher muss Ihre Windows App SDK-App solche Änderungen eigenständig erkennen, wenn Sie Ressourcen basierend auf Umgebungsänderungen aktualisieren möchten.

Eine MRT Core-Beispiel-App

Sehen Sie sich auch die Load-Ressourcen mithilfe des MRT Core-Beispiel-App-Projekts an, das veranschaulicht, wie die MRT Core-API-Oberfläche verwendet wird.