我在Windows Phone 7中有一個簡單的用戶控件,我想從用戶控件構造函數訪問querystring集合。我嘗試了很多方法,似乎無法獲取包含XAML的查詢字符串集合。如何從用戶控件訪問Windows Phone 7中的QueryString
本質上,我導航到頁面,我的用戶控件將訪問查詢字符串值將值寫回接口。
我是否缺少添加程序集或引用?
我在Windows Phone 7中有一個簡單的用戶控件,我想從用戶控件構造函數訪問querystring集合。我嘗試了很多方法,似乎無法獲取包含XAML的查詢字符串集合。如何從用戶控件訪問Windows Phone 7中的QueryString
本質上,我導航到頁面,我的用戶控件將訪問查詢字符串值將值寫回接口。
我是否缺少添加程序集或引用?
我不確定你應該試圖從頁面的構造函數獲取信息,因爲每次登錄此頁面時都不會必要地調用它。更好的方法是覆蓋從PhoneApplicationPage繼承的OnNavigatedTo方法。仔細查看一下你的問題,你可能會試圖在嵌入頁面的控件中做這件事,在這種情況下,你需要進入Page來獲取導航信息。
無論如何,頁面中的NavigationContext屬性都有一個QueryString參數,您可以使用該參數來訪問您之後的信息。
下面的示例假設我有一個瀏覽這個網頁時,在查詢字符串名爲「消息」參數:
public partial class MyPage : PhoneApplicationPage
{
// Constructor
public MyPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
String navigationMessage;
if (NavigationContext.QueryString.TryGetValue("Message", out navigationMessage))
{
this.textBlock1.Text = navigationMessage;
}
}
}
比較遺憾的是 - 我開始到那裏,並感謝澄清。你最好的選擇就是從你的控件中找出頁面的可視樹,然後你可以在NavigationContext中找到它。在下面的示例中,我在頁面中的自定義控件上有一個按鈕,它的click事件找到了nav上下文並查找了某個導航參數 - 我無法從問題或後續事件中看出什麼會驅動控件以「想要」來查找查詢字符串的內容。
(請注意有關從構造函數獲得信息如下下面的代碼)
public partial class WindowsPhoneControl1 : UserControl
{
public WindowsPhoneControl1()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
GetTheQueryString();
}
private void GetTheQueryString()
{
var result = "No Joy";
var page = FindRootPage(this);
if (page != null)
{
if (page.NavigationContext.QueryString.ContainsKey("Param"))
{
result = page.NavigationContext.QueryString["Param"];
}
}
queryStringText.Text = result;
}
private static PhoneApplicationPage FindRootPage(FrameworkElement item)
{
if (item != null && !(item is PhoneApplicationPage))
{
item = FindRootPage(item.Parent as FrameworkElement);
}
return item as PhoneApplicationPage;
}
}
請注意,這並不會因爲XAML中是如何工作的構造函數工作... XML標記驅動構造函數是稱爲,然後按照指示設置屬性,然後將其作爲子/物品/等添加到其容器中。如果你確實需要使用這種「走上樹」的方法,儘快得到上下文,處理控件的加載事件,到時候控件確實有一個父母和一棵樹,可以走...
public WindowsPhoneControl1()
{
InitializeComponent();
Loaded += WindowsPhoneControl1_Loaded;
}
private void WindowsPhoneControl1_Loaded(Object sender, RoutedEventArgs e)
{
GetTheQueryString();
}
我會將一個屬性添加到UserControl子類中,該子類將由OnNavigatedTo()方法中的頁面設置。
我認爲這是行不通的,因爲我在用戶控件中,而不是像在類定義頭中引用的PhoneApplicationPage。這就是訣竅。我似乎無法在UserControl內訪問NavigationContent上的任何內容。 Page/XAML級別,沒有問題。在UserControl中,什麼都沒有。 – 2010-08-18 19:10:55