将属性继承到WPF页面元素

时间:2017-10-13 15:49:59

标签: c# wpf xaml

这可能是一个非常简单的问题,所以我道歉。

我的问题是我想使用C#构建一个多语言WPF应用程序,但我不知道如何使我的不同Page元素继承使我的MainWindow相同的方法翻译成不同的语言。该应用已完成,我只是将其翻译为英语(我的母语是西班牙语)。 我正在使用Resource files进行翻译。

语言翻译代码:

    private void Languages_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
//This is the combobox in which you select the language to display the app in
        Set_Language();            
    }

//This is the method to invoke the Resource Manager and all the stuff from the resource file.    
private void Set_Language()
    {
        if (!boolInit)
        {
            strLanguage = "LeitProjekteV2._0.Languages." + ((ComboBoxItem)LanguageSel.SelectedItem).Name.ToString();
            ResourceManager LocRm = new ResourceManager(strLanguage, typeof(MainWindow).Assembly);
            //Menu buttons
            lblMenu.Content = LocRm.GetString("strMainMenu"); //The names inside the "" are the names of the resource in the Resource file which, depending on the language selected(Spanish, English and German)
//Change the text of whatever I choose; in this case, a Label named 'lblMenu'
            MapButt.Content = LocRm.GetString("strMapButt");
            BuscButt.Content = LocRm.GetString("strBusButt");
            AgeButt.Content = LocRm.GetString("strAgeButt");
            ComButt.Content = LocRm.GetString("strComButt");
            InfButt.Content = LocRm.GetString("strInfButt");
            LoginButt.Header = LocRm.GetString("strLoginButt");
            RegisterButt.Header = LocRm.GetString("strRegisterButt");
            ContacButt.Header = LocRm.GetString("strContacButt");
            MasButt.Header = LocRm.GetString("strMoreButt");

//Here go the names of everything the Pages contain that I want to translate, just like above
//Have no idea how to inherit this method to all the pages
        }
    }

现在,我在同一个pages中嵌入了多个MainWindow.xaml,以便您点击button"地图",Frame更改它& #39; s内容为名为Map.xaml的Page,依此类推其他按钮。 但是如何让那些Pages也翻译?

由于Set_Language()方法采用Combobox的字符串值来选择正确的Resource File,因此我不想为每个Page创建一个组合框我有,虽然这会消除我的问题。

有任何帮助吗?对于可怕的询问方式感到抱歉,我仍然在这里得到提示。

感谢。

2 个答案:

答案 0 :(得分:0)

使用以下内容:

var wnd = Window.GetWindow(this); //get current window

将其投射到您的窗口类并将您的语言公开为公共属性

使用您的页面通过查找当前窗口获取属性

您可以创建一个执行上述操作的父页面类,并为您的所有页面继承它,这样您就不会重复代码

答案 1 :(得分:0)

我可以看到您遇到的困难是,您无法找到一种方法在主窗口和框架中托管的页面中共享组合框。

您可以设置可从整个应用程序访问的全局变量,在应用程序设置中是个好地方。然后,当您使用Combobox进行选择时,只需将所选值更新为该变量。

然后在将每个页面的Set_Language()方法加载到Frame中时调用它们。在每个页面的Set_Language()方法中,您可以查询已存储在应用程序设置中的变量的设置。

如果您想快速解决问题,创建一个静态类来保存所选语言也行。

static class UserSelections
{
    public static string Language { get; set; }
}