C# 带参数的导航页面

C# 带参数的导航页面,c#,silverlight,xaml,url-parameters,C#,Silverlight,Xaml,Url Parameters,我试图在silverlight中的导航页面中传递一个参数,但这不起作用 我得到了错误:在/Views/post上找不到xaml,而我的地址栏中有:/Views/post?id=53 以下是my mainPage.xaml中的部分: <Border BorderBrush="Black" BorderThickness="0.5" Background="Beige" Opacity="0.70" Visibility="Co

我试图在silverlight中的导航页面中传递一个参数,但这不起作用

我得到了错误:
在/Views/post
上找不到xaml,而我的地址栏中有:
/Views/post?id=53

以下是my mainPage.xaml中的部分:

<Border BorderBrush="Black"
        BorderThickness="0.5"
        Background="Beige"
        Opacity="0.70" 
        Visibility="Collapsed"
        CornerRadius="5">
    <HyperlinkButton x:Name="Link4" 
                    Style="{StaticResource LinkStyle}" 
                    NavigateUri="/post?id={id}" 
                    TargetName="ContentFrame" />
</Border>
但是当我到达我的页面(键入Navigation.page)时,当我进入构造函数时,我没有成功地在参数中获取
53

我试过这个:

string id = this.NavigationContext.QueryString["id"];
    Uri uri = new Uri(Application.Current.Host.Source.AbsoluteUri);
但是NavigationContext为空

我也试过:

string id = this.NavigationContext.QueryString["id"];
    Uri uri = new Uri(Application.Current.Host.Source.AbsoluteUri);
没有什么有用的

我从不在silverlight中传递url中的参数。我如何解决这个问题


另外,当我直接在地址栏中写下url时,这似乎并不总是有效的

我认为您需要重写OnNavigatedTo方法,以便获取NavigationContext实例

例如:

// Executes when the user navigates to this page.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    this.Init(NavigationContext.QueryString["id"], NavigationContext.QueryString["id"]);
}
<navigation:Frame x:Name="NavigationFrame" Navigating="NavigationFrame_OnNavigating">
  <navigation:Frame.UriMapper>
    <uriMapper:UriMapper>
      <uriMapper:UriMapping MappedUri="/Views/Page.xaml?id={id}" Uri="/Page/{id}" />
    </uriMapper:UriMapper>
  </navigation:Frame.UriMapper>
</navigation:Frame>
另外,我认为您需要在一个框架中实现一个UriMapper,然后您可以获得所需的参数

例如:

// Executes when the user navigates to this page.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    this.Init(NavigationContext.QueryString["id"], NavigationContext.QueryString["id"]);
}
<navigation:Frame x:Name="NavigationFrame" Navigating="NavigationFrame_OnNavigating">
  <navigation:Frame.UriMapper>
    <uriMapper:UriMapper>
      <uriMapper:UriMapping MappedUri="/Views/Page.xaml?id={id}" Uri="/Page/{id}" />
    </uriMapper:UriMapper>
  </navigation:Frame.UriMapper>
</navigation:Frame>


无法在构造函数中获取NavigationContext实例。它等于null。Page.OnNavigatedTo方法的描述:“当页面成为框架中的活动页面时调用”。它来自msdn。想一想,它是处理NavigationContext的更好的地方。但是,当我输入地址时,我并不总是能够进入我的页面。你是否尝试在OnNavigatedTo方法中获取NavigationContext?NavigationContext的价值是什么?看看类似的问题:我在NavigationContext中得到了价值,但只有当我进入页面时。问题是,我并不总是经历它。大约有一半的时间,当我进入地址时,什么也没发生。