2011-01-22 109 views
1

我設法創建了一個任務欄彈出窗口,就像使用Messenger的窗口一樣。 問題是,當它向下移動而不是消失在任務欄後面時,它就會落在它後面。C#&WPF - 任務欄彈出通知窗口問題

如何讓它消失在任務欄後面?不要忘記在Windows 7中,任務欄是透明的!

這裏是我的代碼:

public partial class WindowNotifier : Window 
{ 
    double xPos = 0; 
    double yPos = 0; 
    Timer closeTimer; 


    public WindowNotifier() 
    { 
     InitializeComponent(); 
     closeTimer = new Timer(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     SetValues(); 
     closeTimer.Tick+=new EventHandler(closeTimer_Tick); 
     closeTimer.Start(); 
    } 

    private void SetValues() 
    { 

     xPos = System.Windows.SystemParameters.WorkArea.Width; 
     yPos = System.Windows.SystemParameters.WorkArea.Height; 

     this.Left = xPos - this.Width; 
     this.Top = yPos - this.Height;  

    } 

    private void closeTimer_Tick(object sender, EventArgs e) 
    { 
     closeTimer.Interval = 50; 
     double curYPos = this.Top; 
     if (curYPos < yPos) 
     { 
      this.Top = curYPos + 8; 

      this.Opacity = this.Opacity - 0.050; 
     } 
     else 
     { 
      this.Close(); 
     } 
    }  
} 

編輯: 我改變了計時器一部分,所以現在我降低了控制的高度和定位它。 現在的問題是,它閃爍。我該如何解決它?

下面是代碼:

closeTimer.Interval = 50; 
    double curYPos = this.Top; 
    int decAmount = 8; 

    if(this.Height - decAmount > 0) 
    { 
     this.Height = this.Height - decAmount; 
     this.Top = this.Top + decAmount; 

     this.Opacity = this.Opacity - 0.010; 
    } 
    else 
    { 
     this.Height = 0; 
     this.Close(); 
     closeTimer.Stop(); 
    } 
+1

當你在它的時候,一定要考慮到不同的任務欄位置和屏幕。我懷疑你最近的代碼可能會對最後一個代碼有一些意想不到的效果。就我個人而言,如果我的任務欄位於左側,右下方消失,我會發現它有點煩人。我希望它在左邊,然後消失在左邊。 – Stigma 2011-01-22 15:01:05

回答

2

你能不能,而不是移動它,降低高度和相同的量其向下移動在同一時間?

嘗試使用SuspendLayout()和ResumeLayout()來防止閃爍。我不太確定這會解決閃爍現象,但是當有許多子控件時,它可能會節省一天的時間。

您還可以嘗試改變您調整大小的時間間隔或將代碼移至重繪/繪製事件。

而不是調整大小,你也可以嘗試一個剪切區域。

+0

天才!現在窗口閃爍的問題。 – 2011-01-22 14:43:40