c# - 本地化为中文会在 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 时,我找不到有关文化限制的任何相关信息,这就是我在这里询问的原因。
解决方案
您出现意外行为的主要原因是命令绑定,而不是本地化。
您可以尝试删除命令绑定Command="{Binding NewProjectCommand}"
并查看新的本地化行为。您会发现菜单变得可点击并且本地化工作正常。
也许你应该在NewProjectCommand
这里发布你的实现,我猜CanExecute
这个命令可能使用了一个未本地化的字符串比较来确定该命令是否启用。
因此,您应该这样做:检查您的NewProjectCommand
实现以查看CanExecute
本地化。
推荐阅读
- python - Chart.js 尝试渲染图表时遇到多个错误
- c - LDR Rd,-Label 与 LDR Rd,[PC+Offset]
- html - 我需要获取 Shopify 网站的商店详细信息
- mysql - laravel 与 json 列的关系
- python - 查找给定列中单词列表的总出现次数(SQL/Pandas DataFrame)
- c# - 传送错误 Unity 2d
- javascript - “HTMLElement”类型上不存在属性“r”
- google-apps-script - 使用工作表而不是电子表格的基于函数的触发器失败
- php - 客户端错误:`POST http://localhost//oauth/token` 导致 `404 Not Found` 响应:
- plm - N = 2 和 T = 60 个四分之一的面板的标准误差 - 使用哪些稳健的标准误差 - vcovHC 或 vcovBK?