2013-12-11 16 views
6

Menu główne mojego programu wykorzystuje numer ContextMenu złożony z MenuItems. Podczas lokalizacji mojego programu (przy użyciu słowników zasobów) ustawiam DynamicResource jako Header każdego z moich MenuItems. Dziwnie DynamicResource kompiluje, ale nie wydaje się wpływać na jakiekolwiek zmiany podczas lokalizacji (język na Headers się nie zmienia).Dlaczego menuItems nie działa z DynamicResource?

Przykład 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> 

Jakie są ograniczenia kontroli MenuItem? Czy ma działać z DynamicResource? Moim ogólnym celem jest zlokalizowanie tych strings, jak to zrobić?

Ten program jest w WPF. Dziękuję Ci.

UPDATE: ten sposób moi Słowniki zasobów są odniesione w moim App.xaml pliku:

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

UPDATE 2: Przykład ciąg w moim angielskim zasobów słownika:

<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> 

Aktualizacja 3: Przykład f namaszczenie na jak zmienić aktualny zasób słownika na hiszpańskim:

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

Pan spojrzał na zaleceń Microsoftu? http://msdn.microsoft.com/en-us/library/ms788718(v=vs.110).aspx –

+0

Tak, widziałem to. Jeśli jest to jedyne rozwiązanie, wygląda na to, że potrzebuję użyć innej metody dla mojego menu. –

+0

Jak tworzysz ten MenuItem? Powinno działać. –

Odpowiedz

2

byłaś dodany LANGUAGE.xaml złożyć do App.ResourceDictionary lub kontrolować ResourceDictionary?

np.

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

Jeśli nie, w jaki sposób odwołujesz się do słowników zasobów?

Aktualizacja:

Jeżeli zmienisz

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

do

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

Czy to wtedy działa? A może nawet działasz po to, aby wykonać jedną z następujących czynności:

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

Twoje XAML powinien działać, co mnie zastanawia, czy poprawnie skonfigurowałeś lokalizację w swojej aplikacji?

Na jak skonfigurować lokalizacja w .net 4.5 zobaczyć this msdn link

+0

Odnoszę się do moich słowników, tak jak to –

+0

Żadna z tych metod nie działa. .: -/Właśnie próbuję tego z 'TextBlock'. Sprawdziłem dwukrotnie i te słowa są zdecydowanie w moich słownikach zasobów. Mogę zweryfikować, czy lokalizacja jest poprawnie skonfigurowana, ponieważ reszta mojego programu lokuje się dobrze. –

+0

hmmm ... To nie jest coś głupiego, że "otwarte" to zastrzeżone słowo? Spróbuj zmienić na coś innego po prostu zamknij (warto spróbować). –