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.
- Wenn Sie also die ResourceContext.GetForCurrentView-API oder die ResourceContext.GetForViewIndependentUse-API verwenden, verwenden Sie stattdessen ResourceManager.CreateResourceContext.
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.
Verwandte Themen
Windows developer