Frage

Ich habe mit der Erstellung einer Windows Store-App für Windows 8.1 begonnen und bin jetzt auf ein Problem mit der Lokalisierung gestoßen.

Ich möchte eine Zeichenfolgenressource von a anzeigen.resw-Datei zur Entwurfszeit, aber jeder Versuch, dies zu tun, ist fehlgeschlagen, obwohl es zur Laufzeit funktioniert.

Bei Verwendung des Attributs x: Uid muss ich noch die Texteigenschaft angeben (dh.für einen TextBlock) und ich schreibe den Text nicht gerne zweimal.

Ich habe auch versucht, eine Eigenschaft für die Zeichenfolge im Viewmodel zu erstellen:

public string Title
{
    get { return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); }
}

Dies funktioniert zur Laufzeit, aber zur Entwurfszeit ist es leer.

Die Frage ist also, gibt es eine Möglichkeit, Ressourcen von a anzuzeigen.resw-Datei im XAML-Designer?

Genauer gesagt, erlaubt die ResourceManager-Klasse.resw-Dateien, die zur Entwurfszeit gelesen werden sollen?

Danke für deine Hilfe, Lukas

War es hilfreich?

Lösung

Alte Methode

Es gibt also ein paar Dinge, die Sie tun können.

Das erste (und einfachste, vorausgesetzt, Sie verwenden x:Uid bereits) besteht darin, nur den Text in das Textfeld einzugeben.Der x:Uid-der zugehörige Wert überschreibt alles, was sich darin befindet.

<TextBlock Text="MyText" x:Uid="MainView_Title"/>

Die zweite Methode besteht darin, die Eigenschaft so zu verwenden, wie Sie sie bereits haben, und dann zu überprüfen, ob sich die App in der Entwurfszeit befindet (mithilfe verschiedener Methoden). Geben Sie dann einen konstanten Wert zurück, falls dies der Fall ist, und die Ressource, falls dies der Fall ist nicht.

public string Title
{
     if(ViewModelBase.IsInDesignTimeStatic) //Mvvm Light's easy accessor
         return "My Text";
     return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title");
}

Hoffe das hilft und viel Spaß beim Codieren!

Bearbeiten:Es scheint einen neuen Weg zu geben, dies zu tun, zumindest ab Windows 8.1.

Neue Methode

  • Erstellen Sie eine Klasse, die auf a verweist ResourceLoader (ähnlich der oben beschriebenen Eigenschaft).
  • Erstellen Sie einen indizierten Eigenschaftsaccessor, der einen Zeichenfolgenschlüssel akzeptiert und den Wert aus dem zurückgibt ResourceLoader.

    public class LocalizedStrings
    {
        public string this[string key]
        {
            get
            {
                return App.ResourceLoader.GetForViewIndependentUse().GetString(key);
            }
        }
    }
    
  • In Ihrem App.xaml, definieren Sie eine StaticResource von diesem Typ.

    <Application.Resources>
        <ResourceDictionary>
            <common:LocalizedStrings x:Key="Localized"/>
        </ResourceDictionary>
    </Application.Resources>
    

Jetzt, wenn Sie mit dem Zugangsschlüssel auf Ihre Immobilie zugreifen möchten MainView_Title, benutze das.Es ist ausführlicher, sollte aber sowohl im Designer als auch in der App selbst übersetzt werden.

<TextBlock Text="{Binding Source={StaticResource Localized}, Path=[MainView_Title]}" />

Sie können es herummischen, um es etwas lesbarer zu machen, wenn Sie möchten, wie zum Beispiel:

<TextBlock Text="{Binding [MainView_Title], Source={StaticResource Localized}}" />

Andere Tipps

Dies ist ein alter Thread, aber da Nate so eine elegante Lösung für das Problem für Win8.1 bereitgestellt habe, dachte ich, ich würde hier fragen ...

Nach viel Untersuchung und Experimentierung scheint die Lösung von Nate nicht für UWP-Apps für Win10 unter VS2017-Community zu arbeiten.Der lokale Annäherungsansatz funktioniert nur in der Laufzeit, aber es erscheint

generasacodicetagpre.

weigert sich, alles außer String zu bringen, außer während der Designzeit.Ich habe viel experimentiert und Dinge wie

generasacodicetagpre.

scheint identisch zwischen der Laufzeit (arbeitet) und der Designzeit (nicht funktionieren).

Ich habe mich gefragt, ob jemand das getroffen hat und es gelöst hat.Nate?:)

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