Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Hide on Close?

Tags:

c#

vb.net

wpf

How do i do this in wpf

VB.NET

   Private Sub FrmSettings_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        e.Cancel = (e.CloseReason = Forms.CloseReason.UserClosing)
        Me.Hide()
    End Sub

c#

private void FrmSettings_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
    e.Cancel = (e.CloseReason == Forms.CloseReason.UserClosing);
    this.Hide();
}

as wpf's Close event just gives me e.Cancel and no closereason :(

like image 597
Peter Avatar asked Dec 06 '22 06:12

Peter


2 Answers

I would like to thank Bob King for his hint and make an addition to his code as C# WPF. It works for me. My application is a tray icon by type. In a WPF XAML form code behind:

protected override void OnInitialized(EventArgs e)
{
    base.OnInitialized(e);

    Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;
}

private bool m_isExplicitClose = false;// Indicate if it is an explicit form close request from the user.

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)

{

    base.OnClosing(e);

    if (m_isExplicitClose == false)//NOT a user close request? ... then hide
    {
        e.Cancel = true;
        this.Hide();
    }

}

private void OnTaskBarMenuItemExitClick(object sender, RoutedEventArgs e)

{            
    m_isExplicitClose = true;//Set this to unclock the Minimize on close 

    this.Close();
}
like image 60
DK. Avatar answered Dec 11 '22 07:12

DK.


There is not an equivalent in the default implementation of WPF. You can use a windows hook to get the reason though.

The following post details how to do this: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/549a4bbb-e77b-4c5a-b724-07996774c60a/

like image 44
JaredPar Avatar answered Dec 11 '22 07:12

JaredPar