如何将自定义的用户控件作为对话框关闭?

4

我设计了一个UserControl,并计划在MainWindow中单击按钮时将其显示为弹出窗口。

我按照这个链接的方法来打开usercontrol作为对话框窗口。

private void btnInstApp_Click(object sender, RoutedEventArgs e)
    {
        Window objWindow = new Window
        {
            Title = "Title 12345",
            WindowStyle = WindowStyle.None,
            WindowStartupLocation = WindowStartupLocation.CenterScreen,
            AllowsTransparency=true,
            Width = 500,
            Height = 200,
            Content = new ucInstrumentApp()
        };

        objWindow.ShowDialog();
    }

我使用None作为WindowStyle,并在UserControl中设计了一个自定义关闭按钮来关闭弹出/对话框窗口。我尝试了下面提供的代码,但它不起作用。

 private void btnClose_Click(object sender, RoutedEventArgs e)
 {      
        //this.Close(); //:not working      
        Window objWindow = new Window
        {               
            Content = new ucInstrumentApp()
        };

        objWindow.Close();
 }

我是WPF/Windows Forms的新手,你们能指导我解决这个问题吗?

2个回答

7
你需要从当前的 UserControl 获取父级的 Window,然后将其关闭。
实现此操作的一种解决方案如下:
    private void btnClose_Click(object sender, RoutedEventArgs e)
    {
         Window parentWindow = Window.GetWindow((DependencyObject)sender);
         if (parentWindow != null)
         {
             parentWindow.Close();
         }
    }

正如您所看到的,它基于Window.GetWindow方法,以下是它的描述:

返回引用到 Window 对象,该对象承载了依赖项对象所处的内容树。


非常感谢您的回答。它很好地工作了... :) - Manikandan Sethuraju

1
尝试
private void btnClose_Click(object sender, RoutedEventArgs e)
{     
    this.Close();
}

那应该可以工作:-)

感谢您的回复。这对于“用户控件”不起作用,只适用于“窗体”。我收到了这样的错误:“...不包含“Close”的定义,也没有接受第一个参数的扩展方法“Close”...” - Manikandan Sethuraju

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接