Verwalten von Ressourcen mit MRT Core
MRT Core ist eine optimierte Version des modernen Windows-Ressourcenverwaltungssystems, das als Teil des Windows App SDK verteilt wird.
MRT Core verfügt sowohl über Buildzeit- als auch Laufzeitfeatures. Zur Erstellungszeit erstellt das System einen Index aller verschiedenen Varianten der Ressourcen, die mit Ihrer App verpackt sind. Dieser Index ist der Paketressourcenindex oder PRI und ist auch im Paket Ihrer App enthalten.
Voraussetzungen
So verwenden Sie MRT Core-APIs im Windows App SDK:
- Laden Sie das neueste experimentelle Release des Windows App SDK herunter und installieren Sie es. Weitere Informationen finden Sie unter "Erste Schritte mit WinUI".
- Befolgen Sie die Anweisungen zum Erstellen Ihres ersten WinUI 3-Projekts oder zum Verwenden des Windows App SDK in einem vorhandenen Projekt.
Weitere Informationen zur Verfügbarkeit von MRT Core im Windows App SDK finden Sie in den Veröffentlichungskanälen.
Pri-Datei (Package Resource Index)
Jedes App-Paket sollte einen binären Index der Ressourcen in der App enthalten. Dieser Index wird zur Erstellungszeit erstellt und ist in einer oder mehreren PRI-Dateien enthalten. Jede PRI-Datei enthält eine benannte Sammlung von Ressourcen, die als Ressourcenzuordnung bezeichnet werden.
Eine PRI-Datei enthält tatsächliche Zeichenfolgenressourcen. Eingebettete Binär- und Dateipfadressourcen werden direkt aus den Projektdateien indiziert. Ein Paket enthält in der Regel eine einzelne PRI-Datei pro Sprache mit dem Namen "resources.pri". Die Datei "resources.pri " im Stammverzeichnis jedes Pakets wird automatisch geladen, wenn das ResourceManager-Objekt instanziiert wird.
PRI-Dateien enthalten nur Daten, sodass sie das portable ausführbare Format (PE) nicht verwenden. Sie sind speziell darauf ausgelegt, datengeschützt zu sein.
Hinweis
Für .NET-Apps wird in Windows App SDK, Version 0.8 und höher, die Build Action-Dateieigenschaft für Ressourcendateien in Visual Studio automatisch festgelegt, wodurch der Bedarf an manueller Projektkonfiguration reduziert wird. Version 1.0 hat Problem 1674 eingeführt. Dies wurde in 1.1 (aus dem stabilen Kanal) behoben, aber der Fix erfordert .NET SDK 6.0.300 oder höher. Wenn Sie eine niedrigere Version des .NET SDK verwenden, verwenden Sie die Problemumgehung weiterhin in den Versionshinweisen zu 1.0.
Zugreifen auf App-Ressourcen mit MRT Core
MRT Core bietet verschiedene Möglichkeiten für den Zugriff auf Ihre App-Ressourcen.
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 ".
Grundlegende Funktionalität mit ResourceLoader
Die einfachste Möglichkeit, programmgesteuert auf Ihre App-Ressourcen zuzugreifen, ist die Verwendung der ResourceLoader-Klasse . ResourceLoader bietet einfachen Zugriff auf Zeichenfolgenressourcen aus der Gruppe von Ressourcendateien, referenzierten Bibliotheken oder anderen Paketen.
Erweiterte Funktionalität mit ResourceManager
Die ResourceManager-Klasse enthält zusätzliche Informationen zu Ressourcen, z. B. Enumeration und Inspektion. Dies geht darüber hinaus, was die ResourceLoader-Klasse bereitstellt.
Ein ResourceCandidate -Objekt stellt einen einzelnen konkreten Ressourcenwert und seine Qualifizierer dar, z. B. die Zeichenfolge "Hallo Welt" für Englisch oder "logo.scale-100.jpg" als qualifizierte Bildressource, die für die Skalierungsauflösung 100 spezifisch ist.
Ressourcen, die für eine App verfügbar sind, werden in hierarchischen Sammlungen gespeichert, auf die Sie mit einem ResourceMap-Objekt zugreifen können. Die ResourceManager-Klasse bietet Zugriff auf die verschiedenen ResourceMap-Instanzen auf oberster Ebene, die von der App verwendet werden, die den verschiedenen Paketen für die App entsprechen. Der Wert "ResourceManager.MainResourceMap " entspricht der Ressourcenzuordnung für das aktuelle App-Paket und schließt alle referenzierten Frameworkpakete aus. Jede ResourceMap wird nach dem Paketnamen benannt, der im Manifest des Pakets angegeben ist. Innerhalb einer ResourceMap sind Unterstrukturen (siehe ResourceMap.GetSubtree). Die Unterstrukturen entsprechen in der Regel den Ressourcendateien, die die Ressource enthalten.
Der ResourceManager unterstützt nicht nur den Zugriff auf die Zeichenfolgenressourcen einer App, es verwaltet auch die Möglichkeit, die verschiedenen Dateiressourcen auflisten und zu überprüfen. Um Konflikte zwischen Dateien und anderen Ressourcen zu vermeiden, die aus einer Datei stammen, befinden sich alle indizierten Dateipfade in einer reservierten "Files" -ResourceMap-Unterstruktur . Die Datei "\Images\logo.png" entspricht beispielsweise dem Ressourcennamen "Files/images/logo.png".
Qualifizieren der Ressourcenauswahl mit ResourceContext
Ressourcenkandidaten werden basierend auf einem bestimmten ResourceContext ausgewählt, bei dem es sich um eine Sammlung von Ressourcenqualifiziererwerten (Sprache, Skalierung, Kontrast usw.) handelt. Ein Standardkontext verwendet die aktuelle Konfiguration der App für jeden Qualifiziererwert, es sei denn, er wird überschrieben. Beispielsweise können Ressourcen wie Bilder für die Skalierung qualifiziert werden, die von einem Monitor zu einem anderen und somit von einer Anwendungsansicht zu einer anderen variieren. Aus diesem Grund verfügt jede Anwendungsansicht über einen eindeutigen Standardkontext. Immer wenn Sie einen Ressourcenkandidaten abrufen, sollten Sie eine ResourceContext-Instanz übergeben, um den für eine bestimmte Ansicht am besten geeigneten Wert zu erhalten.
Beispiel
Ein Beispiel zur Verwendung der MRT Core-API finden Sie im MRT Core-Beispiel.
Siehe auch
- UWP-Ressourcenverwaltungssystem
- Lokalisieren von Zeichenfolgen in der Benutzeroberfläche und im App-Paketmanifest
- Laden von Bildern und Ressourcen mit Anpassung an Skalierung, Design, hohen Kontrast usw.
- Anpassen von Ressourcen mit Qualifizierern für Sprache, Skalierung, hohen Kontrast und anderen Qualifizierern
Windows developer