如何使用按钮单击从另一个xaml窗口打开xaml窗口?

private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { Win1 OP= new Win1(); OP.show(); } 

OP.show()抛出一个错误。

它是一个用户控制表单。

你说Win1是“它是一个用户控制表单。” (重点是我的)。

如果Win1实际上是UserControl类型,则问题是UserControl类型没有定义Show()方法。 因此它不能作为窗口“打开”。

要解决此问题,您需要打开一个窗口并将UC作为该窗口的内容:

 private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { Win1 OP= new Win1(); var host = new Window(); host.Content = OP; host.Show(); } 

作为旁注,您可以在App.xaml中将UserControl用作StartupUri ,它将起作用,因为框架识别出它不是窗口并为其创建窗口。

所有这些答案都很好,但是他们没有利用WPF的导航function。 如果你打算隐藏/关闭当前窗口,那么这是旧的WinForms窗口管理的一个很好的替代品。 而不是创建多个窗口,创建页面,只需使用MainWindow中的单个Frame控件显示它们:

    

然后,当您想要显示另一个“窗口”(实际上是页面)时,可以使用NavigationService更改帧源。 从菜单页面代码后面:

 private void Button_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("/Contact.xaml", UriKind.Relative)); } 

现在将显示“联系”页面。 使用此方法可确保窗口属性标准化。 一个窗口来统治它们!

打开一个窗口并关闭第一个窗口:

 private void Button_Click(object sender, RoutedEventArgs e) { window2 win2= new window2(); win2.Show(); this.Close(); } 

您无法打开UserControl作为窗口或对话框。 最好通过后面的代码或XAML将usercontrol添加到某个Window中,然后打开该窗口。 不要忘记设置该窗口的DataContext。 请记住,父控件/窗口的datacontext将由子控件/用户控件inheritance。

您不能直接显示usercontrol,您应该在另一个窗口中呈现您的usercontrol。

喜欢。

 private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { UserControl1 uc1 = new UserControl1(); var win = new MainWindow(); win.Content = win1; win.Show(); } 

如果你想像弹出窗口那样做:

 private void btn1_click(object sender, RoutedEventArgs e) { newWin win2 = new newWin(); win2.Show(): }