Frage

Ich bin gerade dabei, ein neues Projekt von mir zu beginnen und noch einige Techniken zur Lokalisierung am Auswertung Modularität etc.

Ich habe (zumindest meiner Meinung nach) einer ziemlich guten Annäherung an Lokalisierung, aber jetzt kämpfe ich eine gute Lösung für die Datenbindung zu finden.

Ich mag Werte von Textfeldern binden usw. (UIElements im Allgemeinen) auf ein spezielles Verfahren in der Datacontext des Formulars. Das Verfahren sieht wie folgt aus:

public void GetValue(string name)

Dabei steht Name ein "Pfad" in Form von "node / Unterknoten / subsubnode" ist. Ich dachte an eine Valueconverter für die Bindung verwenden und dies ausgearbeitet ziemlich gut bis jetzt.

Meine Bindung Ausdruck sieht wie folgt aus:

{Binding Path=Localization, Converter={StaticResource LocalizationConverter}, ConverterParameter=PrismBreak/Shell.xaml/New}

Ich denke, dass diese Bindung Ausdruck seine Arbeit, obwohl tun irgendwie die Luft gejagt wird für jeden einzelnen UIElement zu verwenden. Also dachte ich, wenn es möglich war, einen Standard-Valueconverter für einen bestimmten Typen zu definieren. (-> wann immer diese Art irgendwo gebunden ist, das Valueconverter verwendet wird)

Ist das möglich in WPF?

Wenn es nicht möglich ist, gibt es eine andere gute Möglichkeit, sich auf ein Verfahren mit dynamischen Parametern zu binden?

Vielen Dank im Voraus und mit freundlichen Grüßen,

Chris

War es hilfreich?

Lösung

Die vorgeschriebene Art und Weise Lokalisierung für WPF zu tun, ist lokalisierte BAML in Satelliten-Baugruppen zu schaffen; dies wird durch Zugabe der x: Uid angebracht Eigenschaft auf Elemente, die Sie will lokalisiert werden. Es gibt eine schöne WPF-Globalisierung und Localizatio n Abschnitt auf MSDN beschreibt die Techniken.

Ein weiterer Ansatz würde ich vorschlagen, wäre einen statischen Typen ‚Localization Wörterbuch‘ zu schaffen, und ICustomTypeDescriptor , bindet an Strings im Wörterbuch eingehende Eigenschaft zu umleiten. Sie könnten etwas zu tun, am Ende wie folgt:

<Button Content="
    {Binding Source={x:Static local:MyStaticType.Localization}, 
             Path=HelloButtonTitle}" /> 

Und Sie können weiterhin bestehende Technologien nutzen, wie RESX + Satelliten Baugruppen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top