Windows phone 7 如何从用户控件访问Windows Phone 7中的查询字符串

Windows phone 7 如何从用户控件访问Windows Phone 7中的查询字符串,windows-phone-7,query-string,user-controls,Windows Phone 7,Query String,User Controls,我在WindowsPhone7中有一个简单的用户控件,我想从用户控件构造函数访问querystring集合。我尝试了很多方法,但似乎无法访问包含XAML的querystring集合 基本上,我导航到页面,my user控件将访问querystring值以将该值写回接口 我是否缺少添加程序集、引用或其他内容?我不确定您是否应该尝试从页面的构造函数获取信息,因为不必每次登录此页面时都调用它。更好的方法是重写从PhoneApplicationPage继承的OnNavigatedTo方法。仔细查看您的问

我在WindowsPhone7中有一个简单的用户控件,我想从用户控件构造函数访问querystring集合。我尝试了很多方法,但似乎无法访问包含XAML的querystring集合

基本上,我导航到页面,my user控件将访问querystring值以将该值写回接口


我是否缺少添加程序集、引用或其他内容?

我不确定您是否应该尝试从页面的构造函数获取信息,因为不必每次登录此页面时都调用它。更好的方法是重写从PhoneApplicationPage继承的OnNavigatedTo方法。仔细查看您的问题,您可能试图在页面中嵌入的控件中执行此操作,在这种情况下,您需要进入页面以获取导航信息

无论如何,页面中的NavigationContext属性有一个QueryString参数,您可以使用该参数访问所需的信息

以下示例假设在导航到此页面时,查询字符串中有一个名为“Message”的参数:

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中找到页面。在我下面的示例中,我在页面中的自定义控件上有一个按钮,其单击事件查找导航上下文并查找某个导航参数-我无法从问题或您的后续操作中判断是什么促使控件“想要”查找查询字符串的内容

(关于从ctor获取信息的说明如下代码所示)

请注意,由于Xaml的工作方式,这在ctor中无法工作……Xml标记驱动要调用的ctor,然后按照指示设置属性,然后将其作为子/item/etc添加到其容器中。如果您确实需要使用这种“遍历树”技术尽快访问上下文,请处理控件的已加载事件,此时控件确实具有可以遍历的父级和树

    public WindowsPhoneControl1()
    {
        InitializeComponent();
        Loaded += WindowsPhoneControl1_Loaded;
    }

    private void WindowsPhoneControl1_Loaded(Object sender, RoutedEventArgs e)
    {
        GetTheQueryString();
    }

我将向UserControl子类添加一个属性,该属性将由页面在其OnNavigatedTo()方法中设置。

我认为这不起作用,因为我位于UserControl中,而不是您在类定义标题中所指的PhoneApplicationPage中。这就是诀窍。一旦进入UserControl,我似乎无法访问NavigationContent上的任何内容。页面/XAML级别,没有问题。在UserControl中,没有任何内容。
    public WindowsPhoneControl1()
    {
        InitializeComponent();
        Loaded += WindowsPhoneControl1_Loaded;
    }

    private void WindowsPhoneControl1_Loaded(Object sender, RoutedEventArgs e)
    {
        GetTheQueryString();
    }