将不同的按钮指向同一页面但显示不同的内容

时间:2014-01-21 15:26:38

标签: c# windows-phone-8 visual-studio-2013

我正在为Windows 8手机编写应用程序。我想将一些不同的按钮指向同一页面,我正在努力的部分是在按下按钮时让页面显示不同的内容。这可能吗?如果有可能,怎么做?

2 个答案:

答案 0 :(得分:1)

是的,您可以在导航到另一个页面时发送不同的QueryString参数,例如: 从Page1到TargePage

NavigationService.Navigate(new Uri("/SecondPage.xaml?msg=" + 
                                      "From Page1", UriKind.Relative));

从Page2到TargetPage

NavigationService.Navigate(new Uri("/SecondPage.xaml?msg=" + 
                                      "From Page2", UriKind.Relative));

在TargetPage

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            string msg = "";

            if (NavigationContext.QueryString.TryGetValue("msg", out msg))

                textBlock1.Text = msg;           
        }

Link

这是一种方式,或者您可以在App类中拥有一些可在整个应用程序中访问的公共对象。

答案 1 :(得分:0)

正如AD.Net写的那样,你需要做的是在页面之间传递参数。

(没有时间测试代码,只是把它写进去,所以它可能包含错误,如果有人看到它们请编辑出来)

让我们在一个例子中证明这一点:

我的页面上有三个按钮,每次单击其中一个按钮时,我将导航到第二页,但每个按钮都会呈现不同背景的页面:

  1. 让我们创建一个应用并创建两个页面,比如... Page1.xaml Page2.xaml

  2. 现在在 Page1 上使用设计师添加三个按钮,并为此按钮指定点击事件的事件处理程序

    <Button x:Name="btn1" Click="btn1_Click" />
    <Button x:Name="btn2" Click="btn2_Click" />
    <Button x:Name="btn3" Click="btn3_Click" />
    

    (如果您实际上手动编写了代码,事件处理程序应该自动创建,并且应该在代码隐藏中为它们准备存根)

    在每个方法中,让我们设置一个简单的命令,如下所示:

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
      NavigationService.Navigate(new Uri("/Page2.xaml?parameter=Red",UriKind.Relative));
      //You can add different parameter. I'll add Red,Blue and Green
    }
    
  3. 差不多......在Page2.xaml上,我将转到codebehind(Page2.xaml.cs文件)并添加这个有趣的小东西:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        if (NavigationContext.QueryString.ContainsKey("parameter"))
        {
              string val = NavigationContext.QueryString["parameter"];
              switch(val)
              {
                  case "Red":
                       this.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Red);
                       break;
                  case "Blue":
                       this.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Blue);
                       break;
                  case "Green":
                       this.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Green);
                       break;
                  default:
                       this.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Black);
                       break;
              }
        }
    }
    
  4. 和它在那里!