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

时间:2013-10-21 20:30:59

标签: xml xaml c#

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

OP.show()抛出错误。

这是一个用户控制表单。

6 个答案:

答案 0 :(得分:7)

您说Win1是“这是 usercontrol 表单。” (重点是我的)。

如果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,它将起作用,因为框架识别出它不是窗口并为其创建窗口。

答案 1 :(得分:3)

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

<Grid>
    <Frame Source="/Menu.xaml" NavigationUIVisibility="Hidden"/>
</Grid>

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

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您无法直接显示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();
}

答案 5 :(得分:0)

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

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