Fini sh метод выполнения только после закрытия окна внутри WPF C# - PullRequest
0 голосов
/ 08 мая 2020

У меня есть метод и настраиваемое окно WPF (созданное внутри метода) с кнопками, создаваемыми внутри. Кнопки: btnStart, btnCancel Обработчики событий щелчка также определяются в том же методе, потому что кнопки создаются динамически.

Метод возвращает bool.

Итак, что мне нужно, это метод для ожидания Окно WPF закрывается . Событие Close возникает внутри обработчика события btnStart.Click путем вызова метода Window.Close (). Окно не имеет [X] красных кнопок закрытия (пользовательское окно). Он закрывается только из обработчика события btnStart.Click.

Итак, я хочу, чтобы мой метод возвращал значение типа bool только после закрытия Window .

Вот мой код:

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, но пока не добился успеха. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...