Brum
Brum

Reputation: 691

WPF call Window_Closing event from code behind

Recently I have been experimenting with WPF. I was building a little program, but then I stumbled across a little problem. I tried to call the Window_Closing method from the code behind, it told me that I needed to give it cerntain parameters, but I don't have those parameters in the method I am trying to call it from.

This is my code:

            private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
            {
                // My Window Closing code
            }

            private void Application_Exit(object sender, RoutedEventArgs e)
            {
                // Here is where I am trying to call it, giving a empty parameter with it.
                // But it doesn't seem to work.        
                Window_Closing(null, EventArgs.Empty)
            }

What I want

If a cenrtain button is called, I want the Window_Closing event to be called.

Anyone who knows the solution?

Upvotes: 0

Views: 2231

Answers (3)

Praboda
Praboda

Reputation: 550

Add "Window_Closing" & "Close_Click" in the XAML file (MainWindow.xaml) as follows.

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800" Closing="Window_Closing">
<Grid>
    <Button x:Name="Close" Content="Close" Click="Close_Click" Width="100" Height="30"/>
</Grid>

Then in the code behind file (MainWindow.xaml.cs) add the following code. Here the window close command is called from the button click event handler which in turn closes the window, and then the 'Window_Closing' event handler will be automatically called.

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {

    }

    private void Close_Click(object sender, RoutedEventArgs e)
    {
        Close();
    }
}

Upvotes: 1

Andreas
Andreas

Reputation: 982

Just close the window. Then the event will be called automatically, thats what it is there for to begin with.

And as it seems, you try calling it from your Application_Exit, which closes all the windows ... so .... What is your problem?

Just put a breakpoint in the Window_Closing and see, that is executed automatically. If not, maybe you should add the eventhander to all the windows Window_Closing events.

Upvotes: 0

Julpe
Julpe

Reputation: 105

In your Designer, click on the Button and open its property window. There you select the "Events" - the "lightning" and choose the Click event to execute your Window_Closing method. There is a drop down in which you should be able to select it. If not, enter your method name there and press "Enter" to let VS generate the code-behind method.

Upvotes: 2

Related Questions