Domanda

Sto per iniziare un mio nuovo progetto e sto attualmente valutando alcune tecniche di localizzazione, modularità ecc.

Ho (almeno secondo me) un buon approccio alla localizzazione, ma ora faccio fatica a trovare una buona soluzione per il database.

Voglio associare i valori dei campi di testo ecc. (UIElements in generale) a un metodo specifico nel DataContext del modulo. Il metodo è simile al seguente:

public void GetValue (nome stringa)

dove nome è un "percorso" sotto forma di "nodo / nodo secondario / nodo secondario". Ho pensato di utilizzare un ValueConverter per l'associazione e questo ha funzionato abbastanza bene fino ad ora.

La mia espressione vincolante è simile a quella:

{Percorso vincolante = Localizzazione, Convertitore = {StaticResource LocalizationConverter}, ConverterParameter = PrismBreak / Shell.xaml / New}

Penso che questa espressione vincolante, sebbene faccia il suo lavoro, sia in qualche modo esplosa da usare per ogni singolo UIElement. Quindi ho pensato se fosse possibile definire un ValueConverter predefinito per un certo tipo (- > ogni volta che quel tipo è associato a un punto in cui viene usato ValueConverter).

È possibile in WPF?

Se non è possibile, esiste un altro buon modo per collegarsi a un metodo con parametri dinamici?

Grazie in anticipo e cordiali saluti,

Chris

È stato utile?

Soluzione

Il modo prescritto di fare localizzazione per WPF, è creare BAML localizzato in assemblee satellitari; ciò si ottiene aggiungendo la x: Uid allegata agli elementi desiderava essere localizzato. C'è una bella WPF Globalization and Localizatio n su MSDN che descrive la tecniche.

Un altro approccio che suggerirei sarebbe quello di creare un tipo di "Dizionario di localizzazione" statico e di implementare ICustomTypeDescriptor , per reindirizzare i vincoli di proprietà in entrata alle stringhe nel dizionario. Potresti finire per fare qualcosa del genere:

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

E potresti continuare a sfruttare le tecnologie esistenti come gli assiemi RESX + Satellite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top