2013-07-16 46 views
7

Tôi muốn giảm thiểu ứng dụng vào khay hệ thống bằng cách sử dụng WPF. "NotifyIcon" là cách duy nhất để đạt được kết quả này? Nếu có, không gian tên nào là cần thiết để sử dụng "NotifyIcon" trong WPF?Tôi có thể sử dụng NotifyIcon trong WPF không?

Nếu có thể với "NotifyIcon", vui lòng cung cấp một số gợi ý, làm cách nào tôi có thể sử dụng điều đó trong Mainwindow của mình?

cửa sổ chính của tôi là,

public partial class MonthView : MetroWindow 
{ 

    public DateTime SelectedDate { get; set; } 

    public MonthView() 
    { 

      InitializeComponent(); 
      calMain.DisplayDate = DateTime.Today; 
      Globals._globalController = new AppController(); 
      Globals._globalController.appTaskManager.setupLocal(); 
      Globals._globalController.setMonthViewWindow(this); 

    } 

    public void calItemSelectedDate(object sender, SelectionChangedEventArgs e) 
    { 
     DateTime d; 
     if (sender is DateTime) 
     { 
      d = (DateTime)sender; 
     } 
     else 
     { 
      DateTime.TryParse(sender.ToString(), out d); 
     } 

     SelectedDate = d; 

     ShowActivity(d); 
    } 

    public void ShowActivity(DateTime date) 
    { 
     DayView Activity = new DayView(date); 
     Activity.Show(); 
     this.Hide(); 
    } 

    private void SetButton_Click(object sender, RoutedEventArgs e) 
    { 
     SettingsView set = new SettingsView(); 
     set.Show(); 
     this.Hide(); 
    } 

} 
+0

Tôi nghĩ đây là một bản sao http://stackoverflow.com/questions/10230579/easiest-way-to-have-a-program-minimize-itself-to-the-system-tray-using-net-4 – Swift

Trả lời

17

NotifyIcon không được thực hiện trong WPF vì nó là trong hình thức, nhưng bạn vẫn có thể sử dụng Windows Form NotifyIcon, nó nằm trong System.Windows .Forms không gian tên.

Hãy xem những hướng dẫn, họ có thể trang trải nhu cầu của bạn:

giải pháp đơn giản, trực tiếp sử dụng NotifyIcon: http://www.abhisheksur.com/2012/08/notifyicon-with-wpf-applications.html

Nhiều giải pháp tiên tiến, thư viện mới dựa trên NotifyIcon với nhiều tính năng hơn: http://www.codeproject.com/Articles/36468/WPF-NotifyIcon

Thông tin thêm về NotifyIcon có thể tìm thấy tại đây: http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx

+1

Cảm ơn. Sau khi thêm System.Windows.Forms và System.Drawing (cho biểu tượng) trong tài liệu tham khảo của ứng dụng, nó hoạt động tốt. – Dinesh

+0

Tốt để nghe :) –

7

Có, có thể và tôi đã sử dụng thành công trong dự án cá nhân của mình. Có một điều khiển nổi bật được viết bởi Philip Sumi http://www.hardcodet.net/projects/wpf-notifyicon. Tôi đã sử dụng một cách dứt khoát rằng một và nó hoạt động thực sự tuyệt vời và trông đẹp (chủ quan).

image

Chỉ cần lưu ý: chú ý cấp phép về, hãy kiểm tra xem bạn có thể sử dụng nó trong dự án của bạn.

+0

Tôi đã nhìn thấy liên kết mà bạn đã đề cập trong phần mô tả. Nhưng, tôi không hiểu, làm thế nào tôi có thể sử dụng nó trong cửa sổ View của tôi? – Dinesh

+0

@ Dinesh: bạn cần sử dụng nó như một điều khiển WPF. Nó không phải là một cái gì đó có thể được giải thích trong câu trả lời ngắn ở đây. Tải xuống mã, chạy mẫu và xem cách nó được sử dụng. – Tigran

+0

Để tạo NotifyIcon, tôi nên sử dụng không gian tên nào? – Dinesh

2

Bạn có thể đặt mã của bạn cho NotifyIcon trong App.xaml.cs

using System.Drawing; 

namespace DDD 
{ 
    /// <summary> 
    /// Interaction logic for App.xaml 
    /// </summary> 
    public partial class App : Application 
    { 
     System.Windows.Forms.NotifyIcon nIcon = new System.Windows.Forms.NotifyIcon(); 
     public App() 
     { 
      nIcon.Icon = new Icon(@"path to ico"); 
      nIcon.Visible = true; 
      nIcon.ShowBalloonTip(5000, "Title", "Text", System.Windows.Forms.ToolTipIcon.Info); 
      nIcon.Click += nIcon_Click; 
     } 

     void nIcon_Click(object sender, EventArgs e) 
     { 
      //events comes here 
      MainWindow.Visibility = Visibility.Visible; 
      MainWindow.WindowState = WindowState.Normal; 
     } 
    } 
} 

Và trong Mainwindow.xaml.cs của bạn:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     e.Cancel = true; 
     this.Visibility = Visibility.Hidden; 
    } 

Hãy chắc chắn rằng Window_Closing bị ràng buộc với việc đóng cửa sự kiện của cửa sổ chính.

Nếu bạn "đóng" cửa sổ chính của bạn, chế độ hiển thị cửa sổ sẽ được đặt thành ẩn nhưng ứng dụng của bạn sẽ vẫn chạy. Đơn giản bấm vào NotifyIcon trong vùng thông báo và có cửa sổ của bạn trở lại.