【发布时间】:2016-10-14 02:52:43
【问题描述】:
我正在制作一些 wpf 应用程序,我需要更改语言的选项。我的解决方案中有一个名为 Resorces 的文件夹,其中存储了我的所有 resx 文件 - 实际上是 language.resx 和 language.en-EN.resx。我的 XAML 看起来像:
<Window x:Class="CoinCatalogue.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CoinCatalogue"
xmlns:resx="clr-namespace:CoinCatalogue.Resources"
mc:Ignorable="d"
Title="{x:Static resx:language.WindowName}" Height="480" Width="640">
<Grid>
<Menu x:Name="menu" HorizontalAlignment="Left" Height="auto" VerticalAlignment="Top" Width="517">
<MenuItem x:Name="File" Header="{x:Static resx:language.File}">
<MenuItem x:Name="Open" Header="{x:Static resx:language.Open}"/>
</MenuItem>
</Menu>
</Grid>
一切正常 - 我可以访问应用程序中的字符串。在我的主要课程中,我试图通过以下方式改变文化:
language.Culture = new System.Globalization.CultureInfo("en-EN");
但我的应用没有任何反应。此行在 InitializeComponent(); 之前。
我做错了什么?我正在使用 Visual Studio 2015。/以这种方式更改应用语言是个好主意吗?
【问题讨论】:
-
您的程序如何知道语言正在发生变化?每当您更改 WPF 应用程序中显示的内容时,您需要通过调用 OnPropertyChanged() 让您的演示文稿知道。您使用文本和控件执行此操作,以让您的应用程序知道需要更新某些内容。如果您要更改包含要向用户显示的信息的资源,您很可能需要调用 OnPropertyChange 以获取所有应更新的文本。 msdn.microsoft.com/en-us/library/…
-
我基于这样的教程:robertoschiabel.wordpress.com/2010/01/31/…。所有控件(它们的标签)都需要通过 OnPropertChanged 进行更改吗?现在它通过新编译进行了更改,但总而言之,它会在菜单中有可检查的选项。
-
是的。该教程还设置了应用程序启动时的语言。因此,如果您将其设置在那里,您将在每次更改时重新构建您的应用程序。您可能需要花一些时间来熟悉 MVVM 范例。看看这个:stackoverflow.com/questions/2480366/…