2011-09-20 11 views
9

Per la localizzazione Sto utilizzando la funzionalità del file di risorse (file .resx) in .NET, ma mi chiedo se c'è un modo intelligente per catalogare le varie proprietà di localizzazione direttamente in XAML?File di risorse del database in XAML

Il file di risorse sembra solo esporre proprietà statiche, che non riesco a capire come associare a un viewmodel oa un altro dizionario di risorse.

Inoltre, se è possibile, mi piacerebbe che funzionasse in fase di progettazione con Expression Blend.

risposta

18

Ecco come lo faccio.

WPF:

  1. Creare un file di risorse e nello stesso assembly creare una classe che ha un costruttore pubblico. Assicurarsi che il file di risorse sia contrassegnato come pubblico.

  2. Nel file XAML - aggiungere un riferimento a questa posizione nel namespace

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

  3. Per la vostra proprietà text utilizzare il seguente vincolante

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

Silverlight :

  1. Seguire i punti da 1 & 2 di cui sopra e quindi aggiungere il file di risorse come risorsa sia il controllo utente o in una risorsa a livello di applicazione:

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

  2. Per la vostra proprietà text utilizzare il seguente vincolante :

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

+1

Sembra funzionare per WPF. Tuttavia, per Silverlight 'x: Statico' non sembra essere supportato. Qualche idea su come gestirlo? –

+0

Aggiunto esempio Silverlight. – Bryant

2

Molto simile a quello che Geek ha proposto, ma anche un po 'più facile penso:

Creare una classe nello stesso assembly, che eredita il file di risorse ed espone un costruttore pubblico, quindi utilizzare questa classe.

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() 
    { 
    } 
} 
+0

Credo che tu saresti limitato a un singolo file di risorse qui. – tsells

+0

Si aggiunge una classe proxy per file resx. Per WPF il {x: statico ...} è il più semplice. –

Problemi correlati