10 Stimmen

Databind-Ressourcendatei in XAML

Für die Lokalisierung verwende ich die Ressource-Datei (.resx-Dateien) Funktionalität in .NET, aber ich frage mich, wenn es eine intelligente Möglichkeit, Databind die verschiedenen Lokalisierung Eigenschaften direkt in XAML?

Die Ressourcendatei scheint nur statische Eigenschaften freizulegen, die ich nicht herausfinden kann, wie man von einem Viewmodel oder einem anderen Ressourcendictionary binden.

Außerdem möchte ich, wenn es möglich ist, dass es zur Entwurfszeit mit Expression Blend funktioniert.

20voto

tsells Punkte 2723

Ich mache es folgendermaßen.

WPF:

  1. Erstellen Sie eine Ressourcendatei und erstellen Sie in derselben Assembly eine Klasse mit einem öffentlichen Konstruktor. Stellen Sie sicher, dass die Ressourcendatei als öffentlich gekennzeichnet ist.

  2. Fügen Sie in Ihrer Xaml-Datei einen Verweis auf diesen Ort in den Namespaces hinzu

    xmlns:res="clr-namespace:MyProject.StringResources"

  3. Verwenden Sie für Ihre Texteigenschaft die folgende Bindung

    TextProperty="{x:Static res:ResourceFileName.ResourceKey}"

Silverlight:

  1. Führen Sie die obigen Schritte 1 und 2 aus und fügen Sie die Ressourcendatei als Ressource entweder in Ihre Benutzerkontrolle oder in eine Ressource auf Anwendungsebene ein:

    <res:ResourceFileName x:Key="resourcesLabels"/>

  2. Verwenden Sie für Ihre Texteigenschaft die folgende Bindung:

    TextProperty="{Binding ResourceKey, Source={StaticResource resourceLabels}}"

2voto

Mike Fuchs Punkte 11731

Sehr ähnlich wie der Vorschlag von Geek, aber sogar noch ein bisschen einfacher, denke ich:

Erstellen Sie eine Klasse in derselben Assembly, die die Ressourcendatei erbt und einen öffentlichen Konstruktor bereitstellt, und verwenden Sie stattdessen diese Klasse.

public class ResourcesProxy : Properties.Resources
{
    /// <summary>
    /// resolves the problem of internal constructor in resources.designer.cs
    /// in conjunction with xaml usage
    /// </summary>
    public ResourcesProxy() : base()
    {
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X