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