prism - Prism View Navigation 在带有重音符号的注册名称上失败
问题描述
当我使用一个带有重音符号的特定法语注册名称时,我的 Prism WPF 应用程序(Unity Container)无法导航。我试图弄清楚为什么以及我能做些什么来解决它。
英文版使用了“设置”这个词,效果很好:
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<SettingsView>("Settings");
}
public void OnInitialized(IContainerProvider containerProvider)
{
regionManager.RequestNavigate(RegionNames.ContentRegion, "Settings"); // THIS WORKS
}
法语版本使用“Réglages”并失败
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<SettingsView>("Réglages");
}
public void OnInitialized(IContainerProvider containerProvider)
{
_regionManager.RequestNavigate(RegionNames.ContentRegion, "Réglages"); // FAILS
}
该错误是 Prism.Unity.Shared/UnityContainerExtension.cs 中的一个异常
public object Resolve(Type type, string name, params (Type Type, object Instance)[] parameters)
{
try
{
var c = _currentScope?.Container ?? Instance;
// Unity will simply return a new object() for unregistered Views
if (!c.IsRegistered(type, name))
throw new KeyNotFoundException($"No registered type {type.Name} with the key {name}.");
调试器说它正在寻找的名称实际上R%C3%A9glages
不是Réglages
我应该注意到
其他模块的其他法语字符串(没有重音符号)导航得很好,所以我猜这与重音符号有关。但是我对国际化不了解,所以我不知道该怎么做。也许我需要对代码页做点什么......?
我的实际应用程序从特定于语言的 .RESX 文件中获取这些名称。它不使用文字。
如果重要的话,我也在使用 Prism.WPF 和 Prism.Unity 版本 8.0.0.1909。
解决方案
Prism(不必要地)限制了视图的名称,以便能够强制导航到 uri 中,即使在 wpf 等平台上它根本没有意义。因此,您最好坚持使用纯 ASCII 字符串作为您的视图...
无论如何,公平地说,本地化内部常量是没有意义的。
推荐阅读
- c++ - 在代码块 (C++) 中调试时,我可以选择跳过所有打开的内部库调用和函数吗?
- python - 三元图作为子图
- git - 如何使用 git diff 作为 difftool?
- python - Python + Scrapy + JSON + XPath:如何使用 Scrapy 抓取 JSON 数据
- unity3d - Unity offscreen target indicator-how to show the way to an object with a specific tag?
- css - 我找不到适用于此滑块的 css 类
- model-checking - NuSMV:如何排除可能的下一个状态
- javascript - 在不使用多个循环的情况下按标题查找重复数组
- r - 在一行中搜索 r 中的一系列值
- angular - positionClass: 'toast-bottom-right' 不工作在角度