Laden von Bildern und Ressourcen mit Anpassung an Skalierung, Design, hohen Kontrast usw.
Ihre App kann Bildressourcendateien (oder andere Medienobjektdateien) laden, die auf den Anzeigeskalierungsfaktor, das Design, den hohen Kontrast und andere Laufzeitkontexte zugeschnitten sind. Auf diese Bilder kann aus imperativem Code oder xaml-Markup verwiesen werden, z. B. als Source-Eigenschaft eines Image. Sie können auch in der Quelldatei des App-Paketmanifests (der Package.appxmanifest
Datei) angezeigt werden, z. B. als Wert für App-Symbol auf der Registerkarte Visuelle Objekte des Visual Studio-Manifests Designer oder auf Ihren Kacheln und Popups. Indem Sie Qualifizierer in den Dateinamen Ihrer Bilder verwenden und diese optional mithilfe eines ResourceContext dynamisch laden, können Sie dazu führen, dass die am besten geeignete Bilddatei geladen wird, die den Laufzeiteinstellungen des Benutzers für Anzeigeskala, Design, hohen Kontrast, Sprache und andere Kontexte am besten entspricht.
Eine Bildressource ist in einer Imageressourcendatei enthalten. Sie können sich das Bild auch als Medienobjekt und die Datei, die es enthält, als Medienobjektdatei vorstellen. Und Sie finden diese Arten von Ressourcendateien im Ordner \Assets Ihres Projekts. Hintergrundinformationen zur Verwendung von Qualifizierern in den Namen Ihrer Bildressourcendateien finden Sie unter Anpassen Ihrer Ressourcen für Sprache, Skalierung und andere Qualifizierer.
Einige gängige Qualifizierer für Bilder sind:
Qualifizieren einer Bildressource für Skalierung, Design und Kontrast
Der Standardwert für den scale
Qualifizierer ist scale-100
. Diese beiden Varianten sind also gleichwertig (beide liefern ein Bild im Maßstab 100 oder Skalierungsfaktor 1).
\Assets\Images\logo.png
\Assets\Images\logo.scale-100.png
Sie können Qualifizierer in Ordnernamen anstelle von Dateinamen verwenden. Dies ist eine bessere Strategie, wenn Sie über mehrere Ressourcendateien pro Qualifizierer verfügen. Zur Veranschaulichung entsprechen diese beiden Varianten den beiden oben genannten.
\Assets\Images\logo.png
\Assets\Images\scale-100\logo.png
Das nächste Beispiel zeigt, wie Sie Varianten einer Bildressource mit dem Namen /Assets/Images/logo.png
für verschiedene Einstellungen für Anzeigeskala, Design und hohen Kontrast bereitstellen können. In diesem Beispiel wird die Ordnerbenennung verwendet.
\Assets\Images\contrast-standard\theme-dark
\scale-100\logo.png
\scale-200\logo.png
\Assets\Images\contrast-standard\theme-light
\scale-100\logo.png
\scale-200\logo.png
\Assets\Images\contrast-high
\scale-100\logo.png
\scale-200\logo.png
Verweisen auf ein Bild oder ein anderes Medienobjekt aus XAML-Markup und -Code
Der Name oder Bezeichner einer Imageressource ist der Pfad und Dateiname, wobei alle Qualifizierer entfernt wurden. Wenn Sie Ordner und/oder Dateien wie in einem der Beispiele im vorherigen Abschnitt benennen, verfügen Sie über eine einzelne Imageressource, deren Name (als absoluter Pfad) lautet /Assets/Images/logo.png
. Hier erfahren Sie, wie Sie diesen Namen im XAML-Markup verwenden.
<Image x:Name="myXAMLImageElement" Source="ms-appx:///Assets/Images/logo.png"/>
Beachten Sie, dass Sie das ms-appx
URI-Schema verwenden, da Sie auf eine Datei verweisen, die aus dem Paket Ihrer App stammt. Weitere Informationen finden Sie unter URI-Schemas in der UWP-Dokumentation. Auf diese Weise verweisen Sie im imperativen Code auf dieselbe Imageressource.
this.myXAMLImageElement.Source = new BitmapImage(new Uri("ms-appx:///Assets/Images/logo.png"));
Sie können verwenden ms-appx
, um beliebige Dateien aus Ihrem App-Paket zu laden.
var uri = new System.Uri("ms-appx:///Assets/anyAsset.ext");
var storagefile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);
Das ms-appx-web
Schema greift auf die gleichen Dateien wie ms-appx
zu, jedoch im Webfach.
<WebView x:Name="myXAMLWebViewElement" Source="ms-appx-web:///Pages/default.html"/>
this.myXAMLWebViewElement.Source = new Uri("ms-appx-web:///Pages/default.html");
Verwenden Sie für jedes der in diesen Beispielen gezeigten Szenarien die Uri-Konstruktorüberladung , die den UriKind ableiten soll. Geben Sie einen gültigen absoluten URI einschließlich Schema und Autorität an, oder lassen Sie die Autorität wie im obigen Beispiel einfach auf das Paket der App festlegen.
Beachten Sie, dass in diesen Beispiel-URIs dem Schema ("ms-appx
" oder "ms-appx-web
") auf "://
" folgt, auf das ein absoluter Pfad folgt. In einem absoluten Pfad bewirkt das führende "/
", dass der Pfad aus dem Stammverzeichnis des Pakets interpretiert wird.
Hinweis
Die ms-resource
URI-Schemas (für Zeichenfolgenressourcen) und ms-appx(-web)
(für Bilder und andere Ressourcen) führen einen automatischen Qualifiziererabgleich durch, um die Ressource zu finden, die für den aktuellen Kontext am besten geeignet ist. Das ms-appdata
URI-Schema (das zum Laden von App-Daten verwendet wird) führt keinen solchen automatischen Abgleich durch. Sie können jedoch auf den Inhalt von ResourceContext.QualifierValues reagieren und die entsprechenden Ressourcen explizit aus App-Daten laden, indem Sie ihren vollständigen physischen Dateinamen im URI verwenden. Informationen zu App-Daten finden Sie unter Speichern und Abrufen von Einstellungen und anderen App-Daten. Web-URI-Schemas (z. B http
. , https
und ftp
) führen auch keinen automatischen Abgleich durch. Informationen dazu, was in diesem Fall zu tun ist, finden Sie unter Hosten und Laden von Images in der Cloud.
Absolute Pfade sind eine gute Wahl, wenn Ihre Bilddateien dort verbleiben, wo sie sich in der Projektstruktur befinden. Wenn Sie eine Bilddatei verschieben möchten, aber darauf achten, dass sie relativ zur referenzierenden XAML-Markupdatei am selben Speicherort verbleibt, sollten Sie anstelle eines absoluten Pfads einen Pfad verwenden, der relativ zur enthaltenden Markupdatei ist. In diesem Fall müssen Sie kein URI-Schema verwenden. In diesem Fall profitieren Sie weiterhin vom automatischen Qualifiziererabgleich, aber nur, weil Sie den relativen Pfad im XAML-Markup verwenden.
<Image Source="Assets/Images/logo.png"/>
Weitere Informationen zu Sprache, Skalierung und hohem Kontrast finden Sie unter Unterstützung von Kacheln und Popups.
Qualifizieren einer Imageressource für targetsize
Sie können die scale
Qualifizierer und targetsize
für verschiedene Varianten derselben Imageressource verwenden. Sie können sie jedoch nicht für eine einzelne Variante einer Ressource verwenden. Außerdem müssen Sie mindestens eine Variante ohne Qualifizierer targetsize
definieren. Diese Variante muss entweder einen Wert für scale
definieren oder den Standardwert festlegen scale-100
. Daher sind diese beiden Varianten der /Assets/Square44x44Logo.png
Ressource gültig.
\Assets\Square44x44Logo.scale-200.png
\Assets\Square44x44Logo.targetsize-24.png
Und diese beiden Varianten sind gültig.
\Assets\Square44x44Logo.png // defaults to scale-100
\Assets\Square44x44Logo.targetsize-24.png
Diese Variante ist jedoch ungültig.
\Assets\Square44x44Logo.scale-200_targetsize-24.png
Verweisen Sie auf eine Bilddatei aus Ihrem App-Paketmanifest.
Wenn Sie Ordner und/oder Dateien wie in einem der beiden gültigen Beispiele im vorherigen Abschnitt benennen, verfügen Sie über eine einzelne App-Symbol-Bildressource, deren Name (als relativer Pfad) lautet Assets\Square44x44Logo.png
. Verweisen Sie in Ihrem App-Paketmanifest einfach anhand des Namens auf die Ressource. Es ist nicht erforderlich, ein URI-Schema zu verwenden.
Das ist alles, was Sie tun müssen, und das Betriebssystem führt einen automatischen Qualifiziererabgleich durch, um die Ressource zu finden, die für den aktuellen Kontext am besten geeignet ist. Eine Liste aller Elemente im App-Paketmanifest, die Sie auf diese Weise lokalisieren oder anderweitig qualifizieren können, finden Sie unter Lokalisierbare Manifestelemente.
Qualifizieren einer Bildressource für layoutdirection
Weitere Informationen finden Sie unter Spiegeln von Bildern.
Laden eines Bilds für eine bestimmte Sprache oder einen anderen Kontext
Weitere Informationen zu einer Werterhöhung Ihrer App durch Lokalisierung finden Sie unter Globalisierung und Lokalisierung.
Der Standardmäßige ResourceContext enthält einen Qualifiziererwert für jeden Qualifizierernamen, der den Standardlaufzeitkontext (d. h. die Einstellungen für den aktuellen Benutzer und computer) darstellt. Bilddateien werden – basierend auf den Qualifizierern in ihren Namen – mit den Qualifizierern in diesem Laufzeitkontext abgeglichen.
Es kann jedoch vorkommen, dass Ihre App die Systemeinstellungen überschreiben und explizit die Sprache, die Skalierung oder einen anderen Qualifiziererwert angeben soll, der bei der Suche nach einem passenden Bild zum Laden verwendet werden soll. Sie können beispielsweise genau steuern, wann und welche Bilder mit hohem Kontrast geladen werden.
Dazu können Sie einen neuen ResourceContext erstellen (anstatt den Standard zu verwenden), dessen Werte überschreiben und dann dieses Kontextobjekt in Ihren ResourceMap-Bildsuchen mit GetValue oder TryGetValue verwenden.
var resourceManager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager();
var resourceContext = resourceManager.CreateResourceContext();
resourceContext.QualifierValues["Contrast"] = "high";
var resourceMap = resourceManager.MainResourceMap;
var namedResource = resourceMap.TryGetValue(@"Files/Assets/Logo.png", resourceContext);
var imageFileBytes = namedResource.ValueAsBytes;
using (var ms = new InMemoryRandomAccessStream())
{
using (var writer = new DataWriter(ms.GetOutputStreamAt(0)))
{
writer.WriteBytes(imageFileBytes);
writer.StoreAsync().GetResults();
}
var image = new BitmapImage();
image.SetSource(ms);
this.myXAMLImageElement.Source = image;
}
Standardmäßig verwendet die ResourceManager-Klasse den Standardmäßigen ResourceContext.
Wichtige APIs
Siehe auch
- Anpassen Ihrer Ressourcen für Sprache, Skalierung und andere Qualifizierer
- Lokalisieren von Zeichenfolgen in der Benutzeroberfläche und im App-Paketmanifest
- Speichern und Abrufen von Einstellungen und anderen App-Daten
- Unterstützung von Kacheln und Popups für Sprache, Skalierung und hohen Kontrast
- Lokalisierbare Manifestelemente
- Spiegelung von Bildern
- Globalisierung und Lokalisierung
Windows developer
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für