首页 > 解决方案 > 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

我应该注意到

标签: prismunity-container

解决方案


Prism(不必要地)限制了视图的名称,以便能够强制导航到 uri 中,即使在 wpf 等平台上它根本没有意义。因此,您最好坚持使用纯 ASCII 字符串作为您的视图...

无论如何,公平地说,本地化内部常量是没有意义的。


推荐阅读