2015-06-30 2 views
0

У меня есть следующий WPF часть кода:Как динамически добавлять ResourceDictionary к MergedDictionaries в WPF приложения

<Page.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Languages/English.xaml"/> 
      <ResourceDictionary Source="Languages/Romana.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Page.Resources> 

Как я могу выбрать из кода один из этих ResourceDictionarys?

EDIT:

<Page.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Languages/English.xaml"/> 
      <ResourceDictionary Source="Languages/Romana.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Page.Resources> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 

    <ScrollViewer HorizontalScrollMode="Auto" HorizontalScrollBarVisibility="Hidden" VerticalScrollMode="Disabled" VerticalScrollBarVisibility="Hidden" BorderThickness="0,3,0,3" BorderBrush="Aqua"> 
     <StackPanel Orientation="Horizontal"> 
      <AppBarToggleButton x:Name="Connect_toggle" Label="{StaticResource connect}" HorizontalAlignment="Stretch" Icon="Accept" VerticalAlignment="Stretch" d:LayoutOverrides="Width" Click="Connect_toggle_Click"/> 
      <AppBarToggleButton x:Name="Options_toggle" Label="{StaticResource options}" HorizontalAlignment="Stretch" Icon="Accept" VerticalAlignment="Stretch" d:LayoutOverrides="Width" Click="Options_toggle_Click"/> 
     </StackPanel> 
    </ScrollViewer> 

я не указал, что я использую Windows, универсальный (VS2015).

+0

Что вы подразумеваете под 'select code'? Все они объединены - вы можете выбрать отдельные ресурсы по ключевым словам, если это то, что вы имеете в виду? –

+0

Я хочу использовать только один из них. Например: у меня есть comboBox, и если я выберу «Английский», мое приложение загрузит английский.xaml. Выберите Romana будет загружать Romana.xaml. На самом деле, эти файлы xaml определяют мой язык приложения – tatulea

+1

@CharlesMager, * выбирают из кода * или, как мы обычно говорим * в коде позади *, поэтому вопрос заключается в [как объединить ResourceDictionary в код позади] (http://stackoverflow.com/д/2622447/1997232). – Sinatr

ответ

1

Вы можете динамически выбрать файл ResourceDictionary и добавить его в MergedDictionaries с помощью C# кода, как показано в следующем фрагменте кода:

// prefix to the relative Uri for resource (xaml file) 
    string _prefix = String.Concat(typeof(App).Namespace, ";component/"); 

    // clear all ResourceDictionaries 
    this.Resources.MergedDictionaries.Clear(); 

    // add ResourceDictionary 
    this.Resources.MergedDictionaries.Add 
    (
     new ResourceDictionary { Source = new Uri(String.Concat(_prefix + "Languages/English.xaml", UriKind.Relative) } 
    ); 

где «Languages/English.xaml» образец относительный путь к выбранному ResourceDictionary файл соответствующего к вашему примеру.

Надеюсь, это поможет.

+0

Не работает. В режиме отладки он возвращает мне эту ошибку: исключение типа «System.UriFormatException» произошло в Internal.Uri.dll, но не было обработано в коде пользователя – tatulea

+0

См. Расширенный ответ. С уважением, –

+0

Все еще не работает. Он возвращает ту же ошибку – tatulea