2009-11-12 97 views
1

我想导航到传递参数的页面,我必须从主页面开始工作,但是当我尝试在较低级别上做类似的事情时,我得到的页面未找到错误(索引页面工作,但DetailsIndex没有)Silverlight导航问题

MainPage.xaml中

<navigation:Frame.UriMapper> 
        <uriMapper:UriMapper x:Name="myUri"> 
        <uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/> 
        <uriMapper:UriMapping Uri="DetailsIndex/{id}" MappedUri="/Views/DetailsIndex.xaml?id={id}"/> 
        <uriMapper:UriMapping Uri="Index/{id}" MappedUri="/Views/Index.xaml?id={id}"/> 
        <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/> 
        </uriMapper:UriMapper> 

MainPage.xaml.cs中(这工作)

this.ContentFrame.Source = new Uri("/index?id=19", UriKind.Relative); 

IndexPage.xaml.cs(这得到一个错误 - >页面未找到: “DetailsIndex ID = 66?”)

private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      Button btn = sender as Button; 
      string id = btn.Tag.ToString(); 


     this.NavigationService.Navigate(new Uri(string.Format("DetailsIndex?id={0}", id), UriKind.Relative));    
    } 

回答

2

你应该使用URL,而不是映射的URI中导航。

this.NavigationService.Navigate(new Uri(string.Format("DetailsIndex/{0}", id), UriKind.Relative)); 

另外,在Uris的映射中,我相信他们通常以一个领先的/开头。

+0

谢谢...它确实与“/”一起工作,我有一些非常奇怪的行为,它是导航在页面上,然后当我使用导航条件......这抛出了我的错误。 我也在讨论使用单例模式而不是像这样传递参数......它似乎有点笨拙 – 2009-11-12 23:42:57

0

做了一些调查后,我发现下面的解决方案,它为我工作

的XAML:

<uriMapper:UriMapper> 
    <uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/> 
    <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>          
</uriMapper:UriMapper> 

代码隐藏:

private void HyperlinkButton_Click(object sender, RoutedEventArgs e) 
{ 
    HyperlinkButton hyp = sender as HyperlinkButton; 
    string customer_id = hyp.Tag.ToString(); 
    this.NavigationService.Navigate(new Uri("/CustomerDetails?CustomerId=" + customer_id, UriKind.Relative)); 
} 

这样我可以通过查询字符串也

+1

我有点惊讶......使用该模式,您要求/ Views/CustomersDetails?CustomId = 1.xaml,它肯定不存在。也许我在这里弄错了,但我有这个确切的问题。 – jv42 2011-05-04 10:30:16