仅在关闭WPF窗口内部之后,才执行方法

时间:2020-05-08 06:52:14

标签: window

我有一个方法和一个在内部创建的带有按钮的自定义WPF窗口(在方法内部创建)。 按钮:btnStart,btnCancel 点击事件处理程序也是在同一方法内确定的,原因是按钮是动态创建的。

方法返回布尔值。

所以我需要的是等待WPF窗口关闭的方法。 通过调用Window.Close()方法,Close事件在btnStart.Click事件处理程序中引发。 窗口没有[X]红色关闭按钮(自定义窗口)。 它仅从btnStart.Click事件处理程序关闭。

因此,我希望我的方法仅在关闭窗口之后返回布尔值

这是我的代码:

Func<bool> showSetParametersWindowAction = delegate ()
{
    Grid gridMain = new Grid();
    UserControl userControl = new UserControl();
    userControl.Content = gridMain;
    ItemInfoWindow setParametersWindow = new ItemInfoWindow(userControl) { Title = "Set params", Width = 540, Height = 200 + xmlParameters.Count * 25, WindowStartupLocation = WindowStartupLocation.CenterScreen };

    gridMain.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) });
    gridMain.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(40, GridUnitType.Pixel) });
    gridMain.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(10, GridUnitType.Pixel) });

    CustomButton btnStart = new CustomButton() { Content = "Start", Width = 100, Height = 35, HorizontalAlignment = HorizontalAlignment.Right, VerticalAlignment = VerticalAlignment.Center };
    btnStart.SetValue(Grid.RowProperty, gridMain.RowDefinitions.Count - 2);
    btnStart.SetValue(Grid.ColumnProperty, 0);

    CustomButton btnCancel = new CustomButton() { Content = "Cancel", Width = 100, Height = 35, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center };
    btnCancel.SetValue(Grid.RowProperty, gridMain.RowDefinitions.Count - 2);
    btnCancel.SetValue(Grid.ColumnProperty, 2);

    gridMain.Children.Add(btnStart);
    gridMain.Children.Add(btnCancel);

    bool ret = false;
    setParametersWindow.ShowDialog(this);

    btnStart.Click += delegate (object se, RoutedEventArgs routedEventArgs)
    {
        ret = true;

        setParametersWindow.Close();
    };

    btnCancel.Click += delegate (object sen, RoutedEventArgs routedEventArg)
    {
        setParametersWindow.Close();
    };

    return ret;
};

我在Stack上尝试了很多答案,但尚未成功。 预先感谢。

0 个答案:

没有答案