Anpassen von Ressourcen mit Qualifizierern für Sprache, Skalierung, hohen Kontrast und anderen Qualifizierern

In diesem Thema wird das allgemeine Konzept der Ressourcenqualifizierer erläutert, wie sie verwendet werden und wozu die einzelnen Qualifizierernamen dienen. Eine Referenztabelle aller möglichen Qualifiziererwerte finden Sie unter ResourceContext.QualifierValues .

Ihre App kann Ressourcen und Ressourcen laden, die auf Laufzeitkontexte wie Anzeigesprache, hoher Kontrast, Anzeigeskalierungsfaktor und viele andere zugeschnitten sind. Dazu benennen Sie die Ordner oder Dateien Ihrer Ressourcen so, dass sie den Qualifizierernamen und Qualifiziererwerten entsprechen, die diesen Kontexten entsprechen. Sie können beispielsweise möchten, dass Ihre App einen anderen Satz von Bildressourcen im Modus mit hohem Kontrast lädt.

Weitere Informationen zu einer Werterhöhung Ihrer App durch Lokalisierung finden Sie unter Globalisierung und Lokalisierung.

Qualifizierername, Qualifiziererwert und Qualifizierer

Ein Qualifizierername ist ein Schlüssel, der einem Satz von Qualifiziererwerten zugeordnet ist. Hier sind der Qualifizierername und die Qualifiziererwerte für den Kontrast angegeben.

Kontext Qualifizierername Qualifiziererwerte
Die Einstellung mit hohem Kontrast Kontrast standard, high, black, white

Sie kombinieren einen Qualifizierernamen mit einem Qualifiziererwert, um einen Qualifizierer zu bilden. <qualifier name>-<qualifier value> ist das Format eines Qualifizierers. contrast-standard ist ein Beispiel für einen Qualifizierer.

Für einen hohen Kontrast ist contrast-standardalso die Gruppe der Qualifizierer , contrast-high, contrast-blackund contrast-white. Bei Qualifizierernamen und Qualifiziererwerten wird die Groß-/Kleinschreibung nicht beachtet. Beispielsweise contrast-standard sind und Contrast-Standard derselbe Qualifizierer.

Verwenden von Qualifizierern in Ordnernamen

Hier sehen Sie ein Beispiel für die Verwendung von Qualifizierern zum Benennen von Ordnern, die Ressourcendateien enthalten. Verwenden Sie Qualifizierer in Ordnernamen, wenn Sie über mehrere Ressourcendateien pro Qualifizierer verfügen. Auf diese Weise legen Sie den Qualifizierer einmal auf Ordnerebene fest, und der Qualifizierer gilt für alles im Ordner.

\Assets\Images\contrast-standard\<logo.png, and other image files>
\Assets\Images\contrast-high\<logo.png, and other image files>
\Assets\Images\contrast-black\<logo.png, and other image files>
\Assets\Images\contrast-white\<logo.png, and other image files>

Wenn Sie Ihre Ordner wie im obigen Beispiel benennen, verwendet Ihre App die Einstellung mit hohem Kontrast, um Ressourcendateien aus dem Ordner zu laden, der für den entsprechenden Qualifizierer benannt ist. Wenn also die Einstellung "Schwarz mit hohem Kontrast" lautet, werden die Ressourcendateien im \Assets\Images\contrast-black Ordner geladen. Wenn die Einstellung Keine ist (d. h. der Computer befindet sich nicht im Modus mit hohem Kontrast), werden die Ressourcendateien im \Assets\Images\contrast-standard Ordner geladen.

Verwenden von Qualifizierern in Dateinamen

Anstatt Ordner zu erstellen und zu benennen, können Sie einen Qualifizierer verwenden, um die Ressourcendateien selbst zu benennen. Dies ist möglicherweise vorzuziehen, wenn Sie nur über eine Ressourcendatei pro Qualifizierer verfügen. Hier sehen Sie ein Beispiel.

\Assets\Images\logo.contrast-standard.png
\Assets\Images\logo.contrast-high.png
\Assets\Images\logo.contrast-black.png
\Assets\Images\logo.contrast-white.png

Die Datei, deren Name den Qualifizierer enthält, der für die Einstellung am besten geeignet ist, ist die Datei, die geladen wird. Diese übereinstimmende Logik funktioniert für Dateinamen genauso wie für Ordnernamen.

Verweisen auf eine Zeichenfolgen- oder Bildressource nach Name

Weitere Informationen finden Sie unter Verweisen auf einen Zeichenfolgenressourcenbezeichner aus XAML-Markup, Verweisen auf einen Zeichenfolgenressourcenbezeichner aus Code und Verweisen auf ein Bild oder ein anderes Objekt aus XAML-Markup und -Code.

Tatsächliche und neutrale Qualifizierer-Übereinstimmungen

Sie müssen nicht für jeden Qualifiziererwert eine Ressourcendatei bereitstellen. Wenn Sie z. B. feststellen, dass Sie nur ein visuelles Objekt für hohen Kontrast und eines für den Standardkontrast benötigen, können Sie diese Ressourcen wie folgt benennen.

\Assets\Images\logo.contrast-high.png
\Assets\Images\logo.png

Der erste Dateiname enthält den contrast-high Qualifizierer. Dieser Qualifizierer ist eine tatsächliche Übereinstimmung mit jeder Einstellung mit hohem Kontrast, wenn hoher Kontrast aktiviert ist. Mit anderen Worten, es ist eine enge Übereinstimmung, daher wird es bevorzugt. Eine tatsächliche Übereinstimmung kann nur auftreten, wenn der Qualifizierer wie dieser einen tatsächlichen Wert enthält. In diesem Fall high ist ein tatsächlicher Wert für contrast.

Die Datei namens logo.png weist überhaupt keinen Kontrastqualifizierer auf. Das Fehlen eines Qualifizierers ist ein neutraler Wert. Wenn keine bevorzugte Übereinstimmung gefunden werden kann, dient der neutrale Wert als Fallback-Übereinstimmung. Wenn in diesem Beispiel ein hoher Kontrast deaktiviert ist, gibt es keine tatsächliche Übereinstimmung. Die neutrale Übereinstimmung ist die beste Übereinstimmung, die gefunden werden kann, und daher wird das Asset logo.png geladen.

Wenn Sie den Namen von logo.png in logo.contrast-standard.pngändern würden, würde der Dateiname einen tatsächlichen Qualifiziererwert enthalten. Bei hohem Kontrast würde eine tatsächliche Übereinstimmung mit logo.contrast-standard.pngvorhanden sein, und dies ist die Ressourcendatei, die geladen wird. Daher würden dieselben Dateien unter den gleichen Bedingungen geladen, aber aufgrund unterschiedlicher Übereinstimmungen.

Wenn Sie nur eine Gruppe von Ressourcen für hohen Kontrast und einen Satz für den Standardkontrast benötigen, können Sie Ordnernamen anstelle von Dateinamen verwenden. Wenn Sie in diesem Fall den Ordnernamen vollständig weglassen, erhalten Sie die neutrale Übereinstimmung.

\Assets\Images\contrast-high\<logo.png, and other images to load when high contrast theme is not None>
\Assets\Images\<logo.png, and other images to load when high contrast theme is None>

Weitere Informationen zur Funktionsweise des Qualifiziererabgleichs finden Sie unter Ressourcenverwaltungssystem.

Mehrere Qualifizierer

Sie können Qualifizierer in Ordner- und Dateinamen kombinieren. Beispielsweise möchten Sie, dass Ihre App Bildressourcen lädt, wenn der Modus mit hohem Kontrast aktiviert ist und der Anzeigeskalierungsfaktor 400 ist. Eine Möglichkeit dazu sind geschachtelte Ordner.

\Assets\Images\contrast-high\scale-400\<logo.png, and other image files>

Damit logo.png und die anderen Dateien geladen werden sollen, müssen die Einstellungen mit beiden Qualifizierern übereinstimmen.

Eine weitere Option besteht darin, mehrere Qualifizierer in einem Ordnernamen zu kombinieren.

\Assets\Images\contrast-high_scale-400\<logo.png, and other image files>

In einem Ordnernamen kombinieren Sie mehrere Qualifizierer, die durch einen Unterstrich getrennt sind. <qualifier1>[_<qualifier2>...] ist das Format.

Sie können mehrere Qualifizierer in einem Dateinamen im gleichen Format kombinieren.

\Assets\Images\logo.contrast-high_scale-400.png

Abhängig von den Tools und Workflows, die Sie für die Erstellung von Ressourcen verwenden, oder davon, was Am einfachsten zu lesen und/oder zu verwalten ist, können Sie entweder eine einzelne Benennungsstrategie für alle Qualifizierer auswählen oder sie für verschiedene Qualifizierer kombinieren.

AlternateForm

Der alternateform Qualifizierer wird verwendet, um eine alternative Form einer Ressource für einen bestimmten Zweck bereitzustellen. Dies wird in der Regel nur von japanischen App-Entwicklern verwendet, um eine Furigana-Zeichenfolge bereitzustellen, für die der Wert msft-phonetic reserviert ist (siehe Abschnitt "Unterstützung von Furigana für japanische Zeichenfolgen, die sortiert werden können" unter Vorbereiten der Lokalisierung).

Entweder Ihr Zielsystem oder Ihre App muss einen Wert bereitstellen, mit dem alternateform Qualifizierer übereinstimmen. Verwenden Sie das msft- Präfix nicht für Ihre eigenen benutzerdefinierten alternateform Qualifiziererwerte.

Konfiguration

Es ist unwahrscheinlich, dass Sie den configuration Qualifizierernamen benötigen. Sie können verwendet werden, um Ressourcen anzugeben, die nur für eine bestimmte Umgebung zur Erstellungszeit gelten, z. B. testgeschützte Ressourcen.

Der configuration Qualifizierer wird verwendet, um eine Ressource zu laden, die dem Wert der Umgebungsvariablen MS_CONFIGURATION_ATTRIBUTE_VALUE am besten entspricht. Daher können Sie die Variable auf den Zeichenfolgenwert festlegen, der den relevanten Ressourcen zugewiesen wurde, z. Bdesignertest. oder .

Vergleichen Sie

Der contrast Qualifizierer wird verwendet, um Ressourcen bereitzustellen, die den Einstellungen mit hohem Kontrast am besten entsprechen.

Benutzerdefiniert

Ihre App kann einen Wert für den custom Qualifizierer festlegen, und dann werden Ressourcen geladen, die diesem Wert am besten entsprechen. Beispielsweise können Sie Ressourcen basierend auf der Lizenz Ihrer App laden. Wenn Ihre App gestartet wird, überprüft sie ihre Lizenz und verwendet diese als Wert für den custom Qualifizierer, indem SetGlobalQualifierValue aufgerufen wird, wie im Codebeispiel gezeigt.

public void SetLicenseLevel(BrandID brand)
{
    if (brand == BrandID.Premium)
    {
        ResourceContext.SetGlobalQualifierValue("Custom", "Premium", ResourceQualifierPersistence.LocalMachine);
    }
    else if (brand == BrandID.Standard)
    {
        ResourceContext.SetGlobalQualifierValue("Custom", " Standard", ResourceQualifierPersistence.LocalMachine);
    }
    else
    {
        ResourceContext.SetGlobalQualifierValue("Custom", "Trial", ResourceQualifierPersistence.LocalMachine);
    }
}

In diesem Szenario würden Sie Ihren Ressourcen dann Namen zuweisen, die die Qualifizierer custom-premium, custom-standardund custom-trialenthalten.

DeviceFamily

Es ist unwahrscheinlich, dass Sie den devicefamily Qualifizierernamen benötigen. Sie können und sollten die Verwendung vermeiden, wenn möglich, da es Techniken gibt, die Sie stattdessen verwenden können, die viel bequemer und robuster sind. Diese Techniken werden unter Erkennen der Plattform, auf der Ihre App ausgeführt wird , und adaptiven Versionscode beschrieben.

Als letztes Mittel ist es jedoch möglich, devicefamily-Qualifizierer zu verwenden, um Ordner zu benennen, die Ihre XAML-Ansichten enthalten (eine XAML-Ansicht ist eine XAML-Datei, die UI-Layout und Steuerelemente enthält).

\devicefamily-desktop\<MainPage.xaml, and other markup files to load when running on a desktop computer>
\devicefamily-mobile\<MainPage.xaml, and other markup files to load when running on a phone>

Oder Sie können Dateien benennen.

\MainPage.devicefamily-desktop.xaml
\MainPage.devicefamily-mobile.xaml

In beiden Fällen teilt jede Kopie von MainPage.[<qualifier>].xaml eine gemeinsame MainPage.xaml.cs, die in Ihrem Projekt in Bezug auf Name, Speicherort und Inhalt unverändert bleibt.

Sie können auch einen devicefamily-Qualifizierer verwenden, um eine Ressourcendatei (.resw) oder einen Ordner zu benennen. Wenn Ihre App beispielsweise auf der Mobilen Gerätefamilie ausgeführt wird, verwendet das UI-Element <TextBlock x:Uid="DeviceFriendlyName"/> die in Ihrer Resources.devicefamily-mobile.resw Datei definierten Text- und Vordergrundressourcen, wenn es enthält.

<data name="DeviceFriendlyName.Foreground">
    <value>Red</value>
</data>
<data name="DeviceFriendlyName.Text">
    <value>Mobile device</value>
</data>

Weitere Informationen zur Verwendung einer Ressourcendatei finden Sie unter Lokalisieren ihrer UI-Zeichenfolgen.

DXFeatureLevel

Es ist unwahrscheinlich, dass Sie den dxfeaturelevel Qualifizierernamen benötigen. Es wurde für die Verwendung mit Direct3D-Spielressourcen entwickelt, um downlevelressourcen so zu laden, dass sie einer bestimmten hardwarebasierten Konfiguration auf downlevel entsprechen. Aber die Prävalenz dieser Hardwarekonfiguration ist jetzt so gering, dass wir empfehlen, diesen Qualifizierer nicht zu verwenden.

HomeRegion

Der homeregion Qualifizierer entspricht der Einstellung des Benutzers für Land oder Region. Er stellt den Startstandort des Benutzers dar. Zu den Werten gehören alle gültigen BCP-47-Regionstags. Das heißt, jeder aus zwei Buchstaben bestehende ISO 3166-1 Alpha-2-Regionscode sowie der Satz von iso 3166-1 numerischen dreistelligen geografischen Codes für zusammengesetzte Regionen (siehe Un-Statistikabteilung M49 Zusammensetzung von Regionscodes). Codes für "Ausgewählte wirtschaftliche und andere Gruppierungen" sind ungültig.

Sprache

Ein language Qualifizierer entspricht der Einstellung für die Anzeigesprache. Zu den Werten gehören alle gültigen BCP-47-Sprachtags. Eine Liste der Sprachen finden Sie in der IANA-Sprachuntertagregistrierung.

Wenn Ihre App verschiedene Anzeigesprachen unterstützen soll und Sie Zeichenfolgenliterale im Code oder im XAML-Markup haben, verschieben Sie diese Zeichenfolgen aus dem Code/Markup in eine Ressourcendatei (.resw). Sie können dann eine übersetzte Kopie dieser Ressourcendatei für jede Sprache erstellen, die Ihre App unterstützt.

In der Regel verwenden Sie einen language Qualifizierer, um die Ordner zu benennen, die Ihre Ressourcendateien (.resw) enthalten.

\Strings\language-en\Resources.resw
\Strings\language-ja\Resources.resw

Sie können den language- Teil eines language Qualifizierers (d. a. den Qualifizierernamen) weglassen. Sie können dies nicht mit den anderen Arten von Qualifizierern tun; und Sie können dies nur in einem Ordnernamen tun.

\Strings\en\Resources.resw
\Strings\ja\Resources.resw

Anstatt Ordner zu benennen, können Sie Qualifizierer verwenden language , um die Ressourcendateien selbst zu benennen.

\Strings\Resources.language-en.resw
\Strings\Resources.language-ja.resw

Weitere Informationen dazu, wie Sie Ihre App mithilfe von Zeichenfolgenressourcen lokalisierbar machen und auf eine Zeichenfolgenressource in Ihrer App verweisen, finden Sie unter Lokalisieren ihrer UI-Zeichenfolgenzeichenfolgen .

LayoutDirection

Ein layoutdirection Qualifizierer entspricht der Layoutrichtung der Anzeigespracheeinstellung. Beispielsweise muss ein Bild möglicherweise für eine Rechts-nach-Links-Sprache wie Arabisch oder Hebräisch gespiegelt werden. Layoutpanels und Bilder auf Der Benutzeroberfläche reagieren entsprechend auf die Layoutrichtung, wenn Sie die FlowDirection-Eigenschaft festlegen (siehe Anpassen von Layout und Schriftarten und Unterstützung von RTL). Der Qualifizierer ist jedoch für Fälle vorgesehen, layoutdirection in denen einfaches Kippen nicht ausreichend ist, und ermöglicht es Ihnen, auf allgemeinere Weise auf die Richtung der bestimmten Leserichtung und Textausrichtung zu reagieren.

Skalieren

Windows wählt automatisch einen Skalierungsfaktor für jede Anzeige basierend auf dem DPI -Wert (Punkte pro Zoll) und dem Anzeigeabstand des Geräts aus. Weitere Informationen finden Sie unter Effektive Pixel und Skalierungsfaktor. Sie sollten Ihre Images in mehreren empfohlenen Größen (mindestens 100, 200 und 400) erstellen, damit Windows entweder die perfekte Größe auswählen oder die nächste Größe verwenden und skalieren kann. Damit Windows erkennen kann, welche physische Datei die richtige Bildgröße für den Anzeigeskalierungsfaktor enthält, verwenden Sie einen scale Qualifizierer. Die Skalierung einer Ressource entspricht dem Wert von DisplayInformation.ResolutionScale oder der nächstgrößeren Ressource.

Hier sehen Sie ein Beispiel für das Festlegen des Qualifizierers auf Ordnerebene.

\Assets\Images\scale-100\<logo.png, and other image files>
\Assets\Images\scale-200\<logo.png, and other image files>
\Assets\Images\scale-400\<logo.png, and other image files>

In diesem Beispiel wird die Datei auf Dateiebene festgelegt.

\Assets\Images\logo.scale-100.png
\Assets\Images\logo.scale-200.png
\Assets\Images\logo.scale-400.png

Informationen zum Qualifizieren einer Ressource für und scaletargetsizefinden Sie unter Qualifizieren einer Imageressource für Targetsize.

TargetSize

Der targetsize Qualifizierer wird hauptsächlich verwendet, um Dateitypzuordnungssymbole oder Protokollsymbole anzugeben, die in Explorer angezeigt werden sollen. Der Qualifiziererwert stellt die Seitenlänge eines quadratischen Bilds in unformatierten (physischen) Pixeln dar. Die Ressource, deren Wert mit der Einstellung Ansicht in Explorer geladen wird, oder die Ressource mit dem nächstgrößeren Wert, wenn keine genaue Übereinstimmung vorliegt.

Sie können Ressourcen definieren, die mehrere Größen des targetsize Qualifizierers für das App-Symbol (/Assets/Square44x44Logo.png) auf der Registerkarte Visuelle Objekte des App-Paketmanifest-Designers darstellen.

Informationen zum Qualifizieren einer Ressource für und scaletargetsizefinden Sie unter Qualifizieren einer Imageressource für Targetsize.

Design

Der theme Qualifizierer wird verwendet, um Ressourcen bereitzustellen, die der Standardeinstellung für den App-Modus am besten entsprechen, oder die Überschreibung Ihrer App mithilfe von Application.RequestedTheme.

Helles Design der Shell und unbebaute Ressourcen

Mit dem Windows 10 Update vom Mai 2019 wurde ein neues "leichtes" Design für die Windows-Shell eingeführt. Daher werden einige Anwendungsressourcen, die zuvor auf einem dunklen Hintergrund angezeigt wurden, jetzt auf einem hellen Hintergrund angezeigt. Für Apps, die altform-unplated Assets für die Taskleiste und Fensterumschalter (ALT+TAB, Aufgabenansicht usw.) bereitgestellt haben, sollten Sie überprüfen, ob sie auf einem hellen Hintergrund einen akzeptablen Kontrast aufweisen.

Bereitstellen von lichtdesignspezifischen Ressourcen

Apps, die eine maßgeschneiderte Ressource für das Helle Design der Shell bereitstellen möchten, können einen neuen alternativen Formularressourcenqualifizierer verwenden: altform-lightunplated. Dieser Qualifizierer spiegelt den vorhandenen Altform-Unplated-Qualifizierer wieder.

Überlegungen zu Downlevel

Apps sollten den theme-light Qualifizierer nicht mit dem altform-unplated Qualifizierer verwenden. Dies führt zu unvorhersehbarem Verhalten unter RS5 und früheren Versionen von Windows aufgrund der Art und Weise, wie Ressourcen für die Taskleiste geladen werden. In früheren Versionen von Fenstern wird die Design-Light-Version möglicherweise falsch verwendet. Der altform-lightunplated Qualifizierer vermeidet dieses Problem.

Kompatibilitätsverhalten

Aus Gründen der Abwärtskompatibilität enthält Windows Logik, um monochromatische Symbole zu erkennen und zu überprüfen, ob sie mit dem beabsichtigten Hintergrund kontrastiert. Wenn das Symbol die Kontrastanforderungen nicht erfüllt, sucht Windows nach einer kontrastweißen Version des Medienobjekts. Wenn dies nicht verfügbar ist, wird Windows auf die Verwendung der beschichteten Version des Medienobjekts zurückgreifen.

Wichtige APIs