2011-11-22 174 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