Freigeben über


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, hohen Kontrast, Skalierungsfaktor und viele andere zugeschnitten sind. Auf diese Weise benennen Sie die Ordner oder Dateien Ihrer Ressourcen, um den Qualifizierernamen und Qualifiziererwerten zu 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 Kontrast.

Kontext Qualifizierername Qualifiziererwerte
Die Einstellung für hohen Kontrast Kontrast Standard, hoch, schwarz, weiß

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.

Bei hohem Kontrast lautet contrast-standardder Satz von Qualifizierern also : , contrast-high, contrast-blackund contrast-white. Bei Qualifizierernamen und Qualifiziererwerten wird die Groß-/Kleinschreibung nicht beachtet. Beispielsweise contrast-standard sind sie Contrast-Standard derselbe Qualifizierer.

Verwenden von Qualifizierern in Ordnernamen

Nachfolgend finden Sie ein Beispiel für die Verwendung von Qualifizierern zum Benennen von Ordnern, die Objektdateien enthalten. Verwenden Sie Qualifizierer in Ordnernamen, wenn Sie über mehrere Objektdateien pro Qualifizierer verfügen. Auf diese Weise legen Sie den Qualifizierer einmal auf Ordnerebene fest, und der Qualifizierer gilt für alle Elemente innerhalb des Ordners.

\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 für hohen Kontrast, um Ressourcendateien aus dem Ordner zu laden, der für den entsprechenden Qualifizierer benannt ist. Wenn die Einstellung also "Hoher Kontrast Schwarz" 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 ist 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 das, das geladen wird. Diese übereinstimmende Logik funktioniert für Dateinamen genauso wie für Ordnernamen.

Verweisen auf eine Zeichenfolge oder Bildressource anhand des Namens

Weitere Informationen finden Sie unter Verweisen auf einen Zeichenfolgenressourcenbezeichner aus XAML-Markup, verweisen Sie auf einen Zeichenfolgenressourcenbezeichner aus Code, und verweisen Sie auf ein Bild oder eine andere Ressource aus XAML-Markup und Code.

Tatsächliche und neutrale Qualifizierer-Übereinstimmungen

Sie müssen keine Ressourcendatei für jeden Qualifiziererwert angeben. Wenn Sie beispielsweise feststellen, dass Sie nur eine visuelle Ressource für hohen Kontrast und einen 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 für jede Einstellung mit hohem Kontrast, wenn der hohe Kontrast aktiviert ist. Mit anderen Worten, es ist eine enge Übereinstimmung, sodass sie bevorzugt wird. Eine tatsächliche Übereinstimmung kann nur auftreten, wenn der Qualifizierer einen tatsächlichen Wert enthält, wie dies der Fall ist. In diesem Fall high ist ein tatsächlicher Wert für contrast.

Die benannte logo.png Datei hat überhaupt keinen Kontrastqualifizierer. 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 die Ressource logo.png geladen.

Wenn Sie den Namen in logo.png logo.contrast-standard.png"" ändern würden, würde der Dateiname einen tatsächlichen Qualifiziererwert enthalten. Mit hohem Kontrast wäre eine tatsächliche Übereinstimmung mit logo.contrast-standard.pngder Ressourcendatei vorhanden, die geladen werden würde. 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. In diesem Fall erhalten Sie durch Weglassen des Ordnernamens 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 Qualifizierers finden Sie unter Ressourcenverwaltungssystem.

Mehrere Qualifizierer

Sie können Qualifizierer in Ordner- und Dateinamen kombinieren. Sie möchten beispielsweise, dass Die App Bildressourcen lädt, wenn der Modus mit hohem Kontrast aktiviert ist und der Skalierungsfaktor der Anzeige 400 beträgt. Eine Möglichkeit hierzu besteht in geschachtelten Ordnern.

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

Für logo.png und die anderen zu ladenden Dateien müssen die Einstellungen beiden Qualifizierern entsprechen.

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 selben Format kombinieren.

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

Je nach den Tools und Workflows, die Sie für die Erstellung von Ressourcen verwenden, oder je nachdem, was Sie am einfachsten lesen und/oder verwalten können, 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 "Support Furigana für japanische Zeichenfolgen, die sortiert werden können" in how to prepare for localization).

Entweder Ihr Zielsystem oder Ihre App müssen einen Wert angeben, mit dem alternateform Qualifizierer abgeglichen werden. 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 kann verwendet werden, um Ressourcen anzugeben, die nur für eine bestimmte Erstellungszeitumgebung gelten, z. B. nur Testressourcen.

Der configuration Qualifizierer wird verwendet, um eine Ressource zu laden, die am besten mit dem Wert der MS_CONFIGURATION_ATTRIBUTE_VALUE Umgebungsvariable übereinstimmt. Sie können also die Variable auf den Zeichenfolgenwert festlegen, der den relevanten Ressourcen zugewiesen wurde, z designer. B. oder test.

Kontraste

Der contrast Qualifizierer wird verwendet, um Ressourcen bereitzustellen, die den Einstellungen für hohen Kontrast am besten entsprechen.

Benutzerdefiniert

Ihre App kann einen Wert für den custom Qualifizierer festlegen und dann Ressourcen laden, die am besten mit diesem Wert übereinstimmen. Sie können beispielsweise Ressourcen basierend auf der App-Lizenz laden. Wenn Ihre App gestartet wird, überprüft sie ihre Lizenz und verwendet diese als Wert für den custom Qualifizierer, indem Sie SetGlobalQualifierValue aufrufen, 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 dann Den Ressourcennamen zuordnen, die die Qualifizierer custom-premium, custom-standardund custom-trial.

DeviceFamily

Es ist unwahrscheinlich, dass Sie den devicefamily Qualifizierernamen benötigen. Sie können und sollten die Verwendung möglichst vermeiden, da es Techniken gibt, die Sie stattdessen verwenden können, die viel bequemer und robuster sind. Diese Techniken werden in der Erkennung der Plattform beschrieben, auf der Ihre App ausgeführt wird, und versionsadaptiven Code.

Als letzte Möglichkeit ist es jedoch möglich, Geräteamily-Qualifizierer zum Benennen von Ordnern zu verwenden, 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 ist jede Kopie der MainPage.[<qualifier>].xaml Freigaben ein gemeinsames MainPage.xaml.csElement, das in Ihrem Projekt in Bezug auf Name, Ort 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 Mobilgerätefamilie ausgeführt wird, verwendet das UI-Element <TextBlock x:Uid="DeviceFriendlyName"/> die text- und vordergrund-Ressourcen, die in Ihrer Resources.devicefamily-mobile.resw Datei definiert sind, wenn sie 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 der UI-Zeichenfolgen.

DXFeatureLevel

Es ist unwahrscheinlich, dass Sie den dxfeaturelevel Qualifizierernamen benötigen. Es wurde entwickelt, um mit Direct3D-Spielressourcen verwendet zu werden, um zu bewirken, dass Downlevel-Ressourcen geladen werden, um einer bestimmten Hardwarekonfiguration auf unterer Ebene der Zeit zu entsprechen. Aber die Verbreitung dieser Hardwarekonfiguration ist jetzt so niedrig, 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 Startort des Benutzers dar. Die Werte enthalten ein beliebiges gültiges BCP-47-Regionstag. Das heißt, jeder ISO 3166-1 Alpha-2-Zwei-Buchstaben-Regionscode sowie die Gruppe der iso 3166-1 numerischen dreistelligen geografischen Codes für zusammengesetzte Regionen (siehe Zusammensetzung der Statistikabteilung M49 der Vereinten Nationen). Codes für "Ausgewählte wirtschaftliche und andere Gruppierungen" sind ungültig.

Sprache

Ein language Qualifizierer entspricht der Einstellung der Anzeigesprache. Werte enthalten ein beliebiges gültiges BCP-47-Sprachtag. Eine Liste der Sprachen finden Sie in der IANA Language Subtag Registry.

Wenn Ihre App unterschiedliche Anzeigesprachen unterstützen soll und Zeichenfolgenliterale im Code oder im XAML-Markup vorhanden sind, verschieben Sie diese Zeichenfolgen aus dem Code/Markup und 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 auslassen (d. h. den Qualifizierernamen). 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

Statt 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 zum Lokalisieren Ihrer App mithilfe von Zeichenfolgenressourcen und zum Verweisen auf eine Zeichenfolgenressource in Ihrer App finden Sie unter Lokalisieren ihrer UI-Zeichenfolgenzeichenfolgen .

LayoutDirection

Ein layoutdirection Qualifizierer entspricht der Layoutrichtung der Anzeigespracheeinstellung. Beispielsweise muss ein Bild für eine Von rechts nach links gespiegelte 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ützen RTL). Der layoutdirection Qualifizierer ist jedoch für Fälle vorgesehen, in denen einfaches Kippen nicht ausreichend ist und Sie auf die Richtungsalität bestimmter Lesereihenfolge und Textausrichtung auf allgemeinere Weise reagieren können.

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. Siehe Effektive Pixel und Skalierungsfaktor. Sie sollten Ihre Bilder mit 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 identifizieren 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ößten Ressource.

Hier ist ein Beispiel zum 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 sie 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 beide scale Und targetsizefinden Sie unter Qualifizieren einer Bildressource für die Zielgröße.

TargetSize

Der targetsize Qualifizierer wird in erster Linie 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 der Ansichtseinstellung in Explorer entspricht, wird geladen; oder die Ressource mit dem nächstgrößten Wert, wenn keine genaue Übereinstimmung vorhanden ist.

Sie können Objekte 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 beide scale Und targetsizefinden Sie unter Qualifizieren einer Bildressource für die Zielgröße.

Design

Der theme Qualifizierer wird verwendet, um Ressourcen bereitzustellen, die am besten mit der Standardeinstellung für den App-Modus übereinstimmen, oder die Außerkraftsetzung Ihrer App mithilfe von Application.RequestedTheme.

Helles Shelldesign und ressourcen ohne Platte

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

Bereitstellen von designspezifischen Ressourcen für helle Designs

Apps, die eine maßgeschneiderte Ressource für shell light theme bereitstellen möchten, können einen neuen alternativen Formressourcenqualifizierer verwenden: altform-lightunplated. Mit diesem Qualifizierer wird der vorhandene altform-unplated-Qualifizierer gespiegelt.

Überlegungen zu Downlevel

Apps sollten den theme-light Qualifizierer nicht mit dem altform-unplated Qualifizierer verwenden. Dies führt zu unvorhersehbaren Verhaltensweisen in 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 kann die Design-Light-Version falsch verwendet werden. Der altform-lightunplated Qualifizierer vermeidet dieses Problem.

Kompatibilitätsverhalten

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

Wichtige APIs