2011-01-22 8 views
1

メッセンジャーのようなタスクバーのポップアップウィンドウを作成することができました。 タスクバーの後ろに消えずに下に移動したときに、タスクバーの後ろに移動するという問題。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(); 
     } 
    }  
} 

EDIT:

は、ここに私のコードです 今、私は、コントロールの高さを低くし、それを再配置して、私はタイマー一部を変更しました。 問題は点滅することです。どうすれば解決できますか?ここで

はコードです:

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

答えて

2

あなたは、代わりにそれを移動するので、高さを低くし、同じ量で同時にそれを下に移動できませんでしたか?

SuspendLayout()とResumeLayout()を試して、ちらつきを防ぎます。私はこれがちらつきを解決することはかなり確信していませんが、多くの子コントロールがある場合は、その日を節約するかもしれません。

また、サイズを変更する間隔を変更したり、コードをRedraw/Paintイベントに移動したりすることもできます。

サイズ変更の代わりに、クリッピング領域を試すこともできます。

+0

Genius!問題は、ウィンドウが点滅していることです。 –

+0

ヒントをいくつか追加しました。これが助けになるとは思わない。 WinFormsは決してアニメーションを行うために作られたものではありません。 WPFはそれより優れています;-) –

+0

私はウィンドウの再配置と縮小を入れ替えて問題を解決しました。次のステップはwpfに書き込むことです。 –