【问题标题】:Silverlight Navigation + Params?Silverlight 导航 + 参数?
【发布时间】:2010-08-23 21:17:01
【问题描述】:

我正在考虑这样一种情况,即我将拥有一个 Silverlight 3(或更高版本)应用程序,该应用程序将利用 SL 导航框架。

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

的页面

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

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

【问题讨论】:

    标签: c# silverlight navigation


    【解决方案1】:

    与往常一样,这取决于您具体追求什么。如果您只想在登陆页面时提取查询字符串值,请使用 NavigationContext.QueryString 提供的字典:

    假设页面是使用以下 URL 调用的:

    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

    【讨论】:

    • 这绝对是一个很好的答案。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多