【问题标题】:Navigate to a XAML page in a different assembly in Windows Phone 7在 Windows Phone 7 中导航到不同程序集中的 XAML 页面
【发布时间】:2011-06-26 12:51:32
【问题描述】:

我在单独的 Windows Phone 类库中有一个 XAML 页面。该库包含在我的 VS 解决方案中,并从我的应用项目中引用。假设该页面名为 TestPage.xaml,它位于我的名为 SharedPages 的库的根文件夹中。

我想使用 NavigationService 在我的应用中导航到此页面。我发现 this post 建议使用这种 URI 格式:

/{assemblyName};component/{pathToResource}

所以我正在尝试这样的事情:

NavigationService.Navigate(new Uri("/SharedPages;component/TestPage.xaml"));

当我运行它时,我得到以下异常:

仅支持对作为片段、或以“/”开头或包含“;component/”的相对 URI 进行导航。

我做错了什么?

谢谢。

【问题讨论】:

    标签: silverlight windows-phone-7 navigation


    【解决方案1】:

    看起来需要将 URI 创建为相对 URI。这有效:

    NavigationService.Navigate(new Uri("/SharedPages;component/TestPage.xaml", UriKind.Relative));
    

    【讨论】:

    • 正是我想要的。谢谢。
    • 谢谢。我发现“;”之间不能有任何空格和“组件”。
    • 对我也很好。谢谢!
    【解决方案2】:

    嘿,我不认为这是您的情况,但最好查看生成的程序集名称。

    选项 1) 程序集名称不正确

    以下格式:

    /{assemblyName};component/{pathToResource}
    

    可以在项目的选项卡属性中查看程序集名称。我记得有一个人重命名了项目但没有重命名程序集,这是导航失败的原因。

    选项 2)

    程序集名称中的点分隔符。

    我不知道真正的原因,但我花了一些时间才找到它。程序集的名称不能有任何点作为分隔符。我猜 Uri 解析会错误地解析 Uri。例如,我有一个名为“Com.Hmb.Prax”的程序集,但出现以下异常:

    Navigation is only supported to relative URIs that are fragments, or begin with '/', or which contain ';component/'.
    Parameter name: uri
    

    一旦我将我的 dll 重命名为“ComHmbPrax”,它运行良好。 赫伯

    【讨论】:

    • 这真的很烦人,程序集中不能有一个点。我希望通过 Windows Phone 8 可以修复它,但不是...感谢您指出这一点,在其他地方不容易找到!
    • @Redth 大家好!您怎么知道 URI 路径中禁止使用点?您是否找到任何解决此问题的方法?我有两个项目,其中的程序集名称中带有点、名称空间名称、Mercurial 存储库名称等等。改变我提到的一切的想法让我很失望。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多