закройте программно созданное окно кнопкой в этом окне

#c# #wpf

#c# #wpf

Вопрос:

В приведенном ниже коде я создал новое окно, которое появляется, когда я нажимаю кнопку в главной форме. В окне у меня есть изображение и некоторый текст с кнопкой для закрытия окна. Как я могу закрыть только это окно в коде, лежащем в основе? Я пошел дальше и создал btn.Click = new RoutedEventHandler(btn_Click); но мне нужно иметь возможность передать в окне некоторые инструкции, чтобы это было видно в этой функции. Есть ли способ проверить, нажата ли кнопка там, где я создаю окно и кнопку прагматично, чтобы я мог закрыть это окно?

Show_Dialog1_Click это кнопка на главной форме.

вот код для окна и кнопки

 private void Show_Dialog1_Click(object sender, RoutedEventArgs e)
{


    Window wnd = new Window();
    Grid grid = new Grid();
    wnd.Height = 450;
    wnd.Width = 450;
    wnd.MinHeight = 450;
    wnd.MinWidth = 450;
    wnd.MaxHeight = 450;
    wnd.MaxWidth = 450;

    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(30) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(30) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(300) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(100) });
    grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
    wnd.Content = grid;
    BitmapImage src = new BitmapImage();
    src.BeginInit();
    src.UriSource = new Uri("jimmy.jpg", UriKind.Relative);
    src.EndInit();
    Image i = new Image();
    i.Source = src;
    i.Stretch = Stretch.Uniform;


    Button btn = new Button();
    btn.Content = "Close";
    btn.Height =  30;
    btn.Width = 150;
    btn.VerticalAlignment = VerticalAlignment.Bottom;
    btn.HorizontalAlignment = HorizontalAlignment.Center;
    //btn.Click  = new RoutedEventHandler(btn_Click);


    Label lblDialog = new Label();


    lblDialog.Content = "Sample Dialog Box";
    lblDialog.FontWeight = FontWeights.Bold;
    lblDialog.Foreground = Brushes.Black;
    lblDialog.Background = Brushes.LightBlue;

    Label lblexample = new Label();
    lblexample.Content = "This is an example of a standard dialog box component.";
    lblexample.FontSize = 12;
    Grid.SetRow(lblDialog, 0);
    Grid.SetRow(lblexample, 1);
    Grid.SetRow(i, 2);
    Grid.SetRow(btn,3);
    grid.Children.Add(lblDialog);
    grid.Children.Add(lblexample);
    grid.Children.Add(i);
    grid.Children.Add(btn);


    wnd.Owner = this;
    wnd.ShowDialog();

}
  

Ответ №1:

 btn.Click  = (q,w) => wnd.Close();
  

Комментарии:

1. Это называется лямбда-выражением. Это означает, что это функция, которая принимает 2 аргумента (sender и EventArgs) с именами q и w.

2. Также, в отличие от обычных функций, он имеет доступ к любым локальным переменным, объявленным в родительской функции.

3. Еще раз спасибо, я не смог разобраться