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

use*_*566 3 c# xml xaml

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

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

它是一个用户控制表单.

XAM*_*eLi 7

你说那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();
}
Run Code Online (Sandbox Code Playgroud)

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


小智 5

所有这些答案都很好,但是它们没有利用WPF 的导航功能。如果您无论如何要隐藏/关闭当前窗口,那么这是旧WinForms窗口管理的一个很好的替代方案。不是创建多个窗口,而是创建页面并使用 MainWindow 中的单个 Frame 控件简单地显示它们:

<Grid>
    <Frame Source="/Menu.xaml" NavigationUIVisibility="Hidden"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

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

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

现在将显示“联系人”页面。使用此方法可确保窗口属性标准化。一扇窗,统统统统!