首页 > 解决方案 > 本地化为中文会在 WPF 应用程序中禁用我的 XamMenu

问题描述

这是我第一次在这里发帖,所以请放纵一下。

我目前正在尝试将 WPF 应用程序本地化为中文。我正在使用 .resx 资源文件并希望从我的 .xaml 代码中访问这些文件以显示正确的字符串。不幸的是,将文化更改为中文时似乎存在问题:虽然显示了正确的字符串,但我的 XamMenu 被禁用(显示为灰色且不可点击),我不知道为什么,没有错误消息,只是一个无法使用的项目。这是我的代码。

在应用程序启动时:

 System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh");

在 MainWindow.xaml 文件中:

 <ig:XamMenu x:Name="_mainMenuCtrl" Grid.Row="0" Height="25" VerticalAlignment="Top" Background="AliceBlue" >
                <ig:XamMenuItem Header="{x:Static res:Resources.File}" Height="25" VerticalAlignment="Bottom">
                    <ig:XamMenuItem x:Name="_newProjectMenuItem" Header="{x:Static res:Resources.NewProject}" InputGestureText="{StaticResource menuNewProjectInputGesture}" Command="{Binding NewProjectCommand}">
                      .......
                    </ig:XamMenuItem>
                </ig:XamMenuItem>
            </ig:XamMenu>

我在项目中有两个资源文件,Resources.resx 和 Resources.zh.resx。

由于某种原因,当我尝试使用任何其他文化(例如在代码和资源文件名中使用“fr”而不是“zh”)时,菜单工作得非常好。当用 Menu 和 MenuItem 替换 XamMenu 和 XamMenuItem 标记时,它也可以工作。

如果有人知道为什么会发生这种情况,那将非常有帮助。使用 XamMenu 时,我找不到有关文化限制的任何相关信息,这就是我在这里询问的原因。

标签: c#wpfxamllocalizationinfragistics

解决方案


您出现意外行为的主要原因是命令绑定,而不是本地化。


您可以尝试删除命令绑定Command="{Binding NewProjectCommand}"并查看新的本地化行为。您会发现菜单变得可点击并且本地化工作正常。

也许你应该在NewProjectCommand这里发布你的实现,我猜CanExecute这个命令可能使用了一个未本地化的字符串比较来确定该命令是否启用。

因此,您应该这样做:检查您的NewProjectCommand实现以查看CanExecute本地化。


推荐阅读