2014-12-03 3 views
8

사용자가 양식을 최소화하거나 닫을 때 응용 프로그램을 시스템 트레이에 추가하고 싶습니다. 나는 Minimize 케이스를 위해 그것을했다. 아무도 내 애플 리케이션을 계속 실행하고 양식을 닫을 때 시스템 트레이에 추가 할 수 있다고 말해 줄 수 있습니까?WPF를 사용하여 시스템 트레이에 응용 프로그램 최소화/닫기

public MainWindow() 
    { 
     InitializeComponent(); 
     System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon(); 
     ni.Icon = new System.Drawing.Icon(Helper.GetImagePath("appIcon.ico")); 
     ni.Visible = true; 
     ni.DoubleClick += 
      delegate(object sender, EventArgs args) 
      { 
       this.Show(); 
       this.WindowState = System.Windows.WindowState.Normal; 
      }; 
     SetTheme(); 
    } 

    protected override void OnStateChanged(EventArgs e) 
    { 
     if (WindowState == System.Windows.WindowState.Minimized) 
      this.Hide(); 
     base.OnStateChanged(e); 
    } 
+1

내가 당신을 운영자 추천 : https://visualstudiogallery.msdn.microsoft.com/aacbc77c-4ef6-456f-80b7-1f157c2909f7/ – Xaruth

답변

1

OnStateChanged()을 사용할 필요가 없습니다. 대신 PreviewClosed 이벤트를 사용하십시오.

public MainWindow() 
{ 
    ... 
    PreviewClosed += OnPreviewClosed; 
} 

private void OnPreviewClosed(object sender, WindowPreviewClosedEventArgs e) 
{ 
    m_savedState = WindowState; 
    Hide(); 
    e.Cancel = true; 
} 
4

당신은 또한 응용 프로그램을 실행 상태로 유지하고 사용자가 응용 프로그램을 닫을 때 시스템 트레이에 최소화하기 위해 OnClosing을 대체 할 수 있습니다.

MainWindow.xaml.cs를

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

    // minimize to system tray when applicaiton is minimized 
    protected override void OnStateChanged(EventArgs e) 
    { 
     if (WindowState == WindowState.Minimized) this.Hide(); 

     base.OnStateChanged(e); 
    } 

    // minimize to system tray when applicaiton is closed 
    protected override void OnClosing(CancelEventArgs e) 
    { 
     // setting cancel to true will cancel the close request 
     // so the application is not closed 
     e.Cancel = true; 

     this.Hide(); 

     base.OnClosing(e); 
    } 
} 
관련 문제