2011-11-22 129 views
1

我有一个加载到框架中的页面。在后面的代码中,我有一个名为mode的字符串变量。我想要做的是当一个超链接被点击,打开页面并设置模式如何将参数传递给页面?

我希望能够以声明的方式做到这一点。我试着做

NavigatUri="myPage?mode=edit" 

,然后加入以下代码初始化组件调用

mode = this.NavigationContext.QueryString["mode"]; 

后落后,但我得到一个网页未找到错误。我有一种感觉,我在另一个星球上。我是silverlight的新手。我如何以这种方式导航到页面并传递该参数?

回答

1

看看你主页上的UriMapper。最后UriMapping通常会被捕捉一切,看起来像这样: -

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

你会注意到在“/”的URI和相应页的开头所属的“/视图”文件夹中。

使用属性: -

NavigatUri="/myPage?mode=edit" 

确保您在浏览文件夹页。

但是我很肯定你已经有了。你真正的问题是你试图在执行页面构造函数时访问NavigationContext。它在页面生命周期的这一点上不可用。在执行OnNavigatedTo之前,您不应该尝试使用它。

public partial class MyPage : Page 
{ 
    public MyPage() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     string mode = null; 
     if (NavigationContext.QueryString.ContainsKey("mode")) 
     { 
      mode = NavigationContext.QueryString["mode"]; 
     } 

     // Do stuff with mode. 
    } 
} 

你所看到的原因,“找不到网页错误”是那是因为导航应用程式ErrorWindow只是假定任何故障加载一个页面,是因为它没有被发现。假设你已经正确编码你的页面,这可能是一个合理的假设。

+0

即时通讯使用其中一个模板,我无法找到uri映射器在哪里lol。它应该像这样设置。我试过这个,看起来不行。我不再收到错误,但它没有收到参数 – Sinaesthetic

+0

找到了uri映射器,它按照描述进行了设置,但仍然无法使用该参数。我将模式值更改为formMode。我运行了一个显示来显示导航上下文中存在哪些键,并且显示有一个叫做mode的键,但我似乎无法修改它,并且formMode没有被传递。 – Sinaesthetic

+0

实际上,我只是注意到,在地址栏中,尽管事实上我的超链接控件说了,但是mode = 2被传递了吗?formMode = edit – Sinaesthetic