C # & WPF - Проблема с всплывающим окном уведомлений панели задач - PullRequest
1 голос
/ 22 января 2011

Мне удалось создать всплывающее окно на панели задач, как в Messenger.Проблема в том, что когда он движется вниз, а не исчезает за панелью задач, он просто идет за ним.

Как я могу заставить его исчезнуть за панелью задач?не забывайте, что в 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 Ответ

2 голосов
/ 22 января 2011

Не могли бы вы вместо того, чтобы переместить его, уменьшить высоту и одновременно сдвинуть его вниз на ту же величину?

Попробуйте SuspendLayout () и ResumeLayout (), чтобы предотвратить мерцание. Я не совсем уверен, что это решит проблему мерцания, но при наличии большого количества дочерних элементов управления это может спасти день.

Вы также можете изменить интервал изменения размера или переместить код в событие перерисовки / рисования.

Вместо изменения размера вы также можете попробовать вырезать регион.

...