【问题标题】:uwp create xaml or new page dynamicallyuwp 动态创建 xaml 或新页面
【发布时间】:2017-06-17 16:59:37
【问题描述】:

我是 uwp 新手,不想创建多个静态 xaml 文件,如何创建新页面、向该页面添加动态控件和导航

namespace UItest
{
   // <summary>
   // An empty page that can be used on its own or navigated to within a 
   // </summary>
   public sealed partial class MainPage : Page
   {
     public MainPage()
     {
        InitializeComponent();
     }
     private void btntest_Click(object sender, RoutedEventArgs e)
     { 
       Frame.Navigate(typeof(page2));
     }
   }

   public sealed partial class page2 : Page
   {
     public page2()
     {
        Button bt = new Button();
         bt.Content = "page2";
      } 
   }
}

在上面的代码中,我正在尝试创建新类(page2),在按钮单击事件中它应该导航到页面

【问题讨论】:

  • 那么问题是什么?按钮导航不正确,或者新页面没有显示您的按钮?
  • 不,它正在抛出 AccessViolationException。我没有创建正确的页面本身,我不知道如何动态创建页面

标签: c# xaml uwp


【解决方案1】:

不确定这是否可能,也许是,因为大多数 XAML 事情也可以在后面的代码中完成。不过,也许可以尝试一些不同的东西——创建一个页面的基本模板——让我们称之为MultiPage,并根据合适的传递参数在OnNavigatedTo 上重新设计它。一个简短的示例 - MultiPage's 后面的代码:

public enum PageType { First, Second }

public sealed partial class MultiPage : Page
{
    public MultiPage()
    {
        this.InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        switch ((PageType)e.Parameter)
        {
            case PageType.First:
                this.Content = new Button { Content = "First page" };
                break;
            case PageType.Second:
                this.Content = new Button { Content = "Second page" };
                break;
            default:
                break;
        }
    }
}

以及导航到该页面的方式:

private void FirstClick(object sender, RoutedEventArgs e)
{
    this.Frame.Navigate(typeof(MultiPage), PageType.First);
}

private void SecondClick(object sender, RoutedEventArgs e)
{
    this.Frame.Navigate(typeof(MultiPage), PageType.Second);
}

【讨论】:

  • 它适用于单页,假设 Mainpage -> Multipage(First) -> Multipage(Second),如果我点击后退按钮,它会导航到 mainpage,它应该导航回 Multipage(First)跨度>
  • @SHASHIKUMARS 那么这个方法对你不起作用——它在同一个页面实例上运行,尽管内容不同。
猜你喜欢
  • 2016-12-25
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多