【问题标题】:Using code-behind added DynamicResource in all windows在所有窗口中使用代码隐藏添加的 DynamicResource
【发布时间】:2017-03-06 13:24:08
【问题描述】:

我正在开发一个多语言 WPF 应用程序,我通过 ResourceDictionary 实现了不同的语言。 程序中的所有字符串都包含对 ResourceDictionary 键的引用。

这工作得很好,但只适用于主窗口。我怎样才能将它也应用到任何其他窗口?

更改语言的代码如下所示:

ResourceDictionary dict = new ResourceDictionary();           
        dict.Source = new Uri("..\\Resource Dictionary\\Jeziki\\SloLanguage.xaml", UriKind.Relative);
        this.Resources.MergedDictionaries.Add(dict);

示例主窗口控件

<MenuItem Header="{DynamicResource datoteka}" Template="{DynamicResource MenuItem}" Foreground="White">
                <MenuItem Header="{DynamicResource novo}" Click="menu_novo_Click" Foreground="Black"/>
                <MenuItem Header="{DynamicResource odpri}" Click="menu_open_Click" Foreground="Black"/>
                <MenuItem Header="{DynamicResource shrani}" Click="menu_save_Click" Foreground="Black"/>

【问题讨论】:

  • 也许很明显,但你为什么不对其他窗口做同样的事情呢?
  • 据我了解,向 MergedDictionaries 添加新资源适用于所有窗口,因为所有窗口都可以访问它们。请问您如何建议我对每个窗口都这样做?
  • 存在一个已知问题,您必须设置默认样式才能触发ResourceDictionaryMergedDictionaries。顺便说一句,我建议您将MergedDictionaries设置为App.xaml
  • 我使用了代码隐藏,因此它会动态更改,在 App.xaml 中设置它不会做任何事情。您能否提供一个设置默认样式的示例?我没听懂。
  • 这里的例子:link 1link 2link 3

标签: c# wpf xaml resourcedictionary dynamicresource


【解决方案1】:

我通过改变解决了问题

this.Resources.MergedDictionaries.Add(dict);

Application.Current.Resources.MergedDictionaries.Add(dict);

将字典设置为全局(因此每个窗口都可以访问它)

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多