Eigene MarkupExtension soll auf Event einer anderen Klasse reagieren

  • WPF

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Schmittmuthelm.

    Eigene MarkupExtension soll auf Event einer anderen Klasse reagieren

    Ich habe eine statische Klasse MultiLanguage. In dieser Klasse habe ich eine Property CultureInfo vom Typ CultureInfo, welche entweder "de-DE" oder "en-US" ist (Änderung durch eigene Methode SetLanguage()).
    In meiner Anwendung habe ich Controls deren Text entsprechend der aktuellen CultureInfo übersetzt werden muss. Hierzu habe ich zwei Resource.resx Dateien mit den entsprechenden Texten.
    Weil ich in der Anwendung nicht extra Properties anlegen wollte, die sich beim LanguageChanged-Event von MultiLanguage ändern und an diese binden..z.B.:

    C#-Quellcode

    1. public string MeineBeschreibung {get;set;} //hier nur exemplarisch, INotifyPropertyChanged wäre gegeben
    2. private void MultiLanguage_LanguageChanged(object sender, EventArgs e) {
    3. MeineBeschreibung = MultiLanguage.GetText(Resource_ID_Enum.WertEins); //wieder exemplarisch
    4. }

    XML-Quellcode

    1. <TextBlock Text="{Binding MeineBeschreibung}"/>

    Deshalb habe ich mir gedacht, ich nutze eine eigene MarkupExtension, das funktioniert soweit auch, allerdings wird nicht darauf reagiert wenn sich die Sprache ändert.

    Da mir das Beschreiben des Problems etwas undurchsichtig erscheint, hänge ich ein Projekt an was die Problematik deutlicher zeigt.
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Schmittmuthelm“ ()

    Hallo,

    Ich verwende aktuell diese Extension github.com/XAMLMarkupExtensions/WPFLocalizationExtension

    In Verbindung mit dem ResX Manager ein Traum.
    wenn du allerdings ein Click ONCE Setup nutzt geht es aktuell nicht weil ein Problem mit der Manifest und Strong Name Signatur vorliegt. An dem Problem knabber ich gerade (wollte auf Click ONCE umstellen).
    mfG.
    Stephan
    Hallo,

    ich hab dir mal ganz schnell ein Beispiel gebastelt, ohne MVVM oder irgendwas einfach nur um zu zeigen wie du das verwenden kannst.

    Beim Laden der Applikation wird die Culture sicherheitshalber gesetzt.
    Im Code Behind vom MainWindow wird beim Ändern der Auswahl im Combo die Sprache geändert.

    Bitte das Beispiel nur als Leitfaden zu sehen und nicht als sauber ausprogrammiert. Ich hoffe du kannst damit was anfangen.

    MultiLanguageDemo.zip
    mfG.
    Stephan