Silverlight Navigation + Params?

时间:2010-08-23 21:17:02

标签: c# silverlight navigation

我正在考虑使用Silverlight 3(或更高版本)应用程序的情况,该应用程序将使用SL导航框架。

让我们假设(为了简单起见)它将是一个简单的论坛。在我的应用程序中,我有一个名为Forums.xaml

的页面

通常,当我导航到所述页面时,浏览器中的URL会发生变化,尾随字符串将与页面名称匹配。

通常可以通过在网址中提供帖子的ID来访问论坛帖子(直接导航到论坛帖子)。 Silverlight中有这样的事情吗?

1 个答案:

答案 0 :(得分:2)

一如既往,这取决于你的具体目标。如果您只想在登陆页面时提取查询字符串值,请使用NavigationContext.QueryString提供的字典:

假设使用以下网址调用了该页面:

mainFrame.Navigate(new Uri("/Page1.xaml?Param=value", UriKind.Relative));

生成的OnNavigatedTo覆盖可能如下所示:

    // Executes when the user navigates to this page.
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (NavigationContext.QueryString.ContainsKey("Param"))
        {
            paramText.Text = NavigationContext.QueryString["Param"];
        }
    }

然后,您可以根据传入参数调整“Page1”上的内容。

现在,如果你想使用Uri Mapping并清理你的Uri,你可以声明一个UriMapper并将它交给你的导航框架,然后用它将你的“干净”网址改成一个有查询字符串的网址。

        <Navigation:UriMapper x:Key="PageMapper">
            <Navigation:UriMapping Uri="/Things/{value}" MappedUri="/Page1.xaml?Param={value}"/>
        </Navigation:UriMapper>

使用时调用:

mainFrame.Navigate(new Uri("/Things/newValue", UriKind.Relative));

将使用上面OnNavigatedTo中列出的相同调用,并将“newValue”作为查询字符串(在您的情况下为Id)传递,并且以下内容显示在地址栏中:

http://localhost:1877/SilverlightApplication3TestPage.aspx#/Things/newValue