2013-12-11 15 views
6

Il menu principale del mio programma utilizza uno ContextMenu composto da MenuItems. Durante la localizzazione del mio programma (usando i dizionari delle risorse), ho impostato uno DynamicResource come il Header di ciascuno dei miei MenuItems. Stranamente DynamicResource compila, ma non sembra influenzare alcuna modifica durante la localizzazione (la lingua sullo Headers non cambia).Perché MenuItem non funziona con DynamicResource?

Esempio di MenuItem:

//I'm not sure if the x:Name or the PlacementRectangle is interfering with anything... 
<ContextMenu x:Name="MainContextMenu" PlacementRectangle="{Binding RelativeSource={RelativeSource Self}}"> 
<MenuItem Header="{DynamicResource open}" /> 
</ContextMenu> 

Quali sono i vincoli del controllo MenuItem? Dovrebbe funzionare con DynamicResource? Il mio obiettivo generale è quello di localizzare questi strings, come faccio?

Questo programma è in WPF. Grazie.

UPDATE: Ecco come il mio I dizionari risorse si fa riferimento nel mio file App.xaml:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Lang.en-US.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary> 
<Application.Resources> 

UPDATE 2: La stringa di esempio nel mio dizionario Inglese Resource:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:sys="clr-namespace:System;assembly=mscorlib"> 

    <sys:String x:Key="open">Open</sys:String> 
</ResourceDictionary> 

Aggiornamento 3: Un esempio f unzione per come posso cambiare il dizionario corrente delle risorse a Spagnolo:

private void spanishChange_Click(object sender, RoutedEventArgs e) 
{ 
    Application.Current.Resources.MergedDictionaries.Clear(); 

    Application.Current.Resources.MergedDictionaries.Add(
      (ResourceDictionary)Application.LoadComponent(new Uri("LangspES.xaml", UriKind.Relative))); 

    LanguageChange.FireLanguageChanged(); 
} 
+0

Hai guardato le raccomandazioni di Microsoft? http://msdn.microsoft.com/en-us/library/ms788718(v=vs.110).aspx –

+0

Sì, ho visto questo. Se questa è l'unica soluzione sembra che potrebbe essere necessario utilizzare un altro metodo per il mio menu. –

+0

Come state creando questo MenuItem? Dovrebbe funzionare. –

risposta

2

Hanno aggiunto il file LANGUAGE.xaml a App.ResourceDictionary o controllare ResourceDictionary?

ad es.

<Application.Resources> 
    <ResourceDictionary Source="LANGUAGE1.xaml" /> 
    <ResourceDictionary Source="LANGUAGE2.xaml" /> 
</Application.Resources> 

In caso contrario, come si fa riferimento ai dizionari delle risorse?

Aggiornamento:

Se si cambia

<MenuItem Header="{DynamicResource open}" /> 

a

<MenuItem Header="{StaticResource open}" /> 

lo fa poi lavorare? O anche

<TextBox DockPanel.Dock="Top" Text="{StaticResource open}" /> 

lavoro?

Apparentemente il tuo xaml dovrebbe funzionare, il che mi fa meraviglia che hai configurato correttamente la localizzazione nella tua app?

Per come impostare la localizzazione in .NET 4.5 vedere this msdn link

+0

Sto riferendo i miei dizionari proprio come questo –

+0

Non di questi metodi funzionano .. .: -/Proprio ora ci provo anche con un 'TextBlock'. Ho controllato due volte e queste parole sono definitivamente nei miei dizionari delle risorse. Posso verificare che la localizzazione sia impostata correttamente perché il resto del mio programma si adatta bene. –

+0

hmmm ... Non è una cosa sciocca che "aprire" sia una parola riservata, vero? Prova a passare a qualcos'altro solo encase (vale la pena provare). –

Problemi correlati