C#& WPF - 任务栏弹出通知程序窗口的问题

时间:2011-01-22 13:59:47

标签: c# wpf popup taskbar notifyicon

我设法创建了一个任务栏弹出窗口,就像信使中的窗口一样。 问题是,当它向下移动而不是在任务栏后面消失时,它就会落后于它。

如何让它消失在任务栏后面?不要忘记在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 个答案:

答案 0 :(得分:2)

你不能,而不是移动它,降低高度并同时向下移动相同的数量?

尝试使用SuspendLayout()和ResumeLayout()来防止闪烁。我不太确定这会解决闪烁现象,但是当有很多子控制时,它可能会节省一天。

您还可以尝试变化调整大小的间隔或将代码移动到Redraw / Paint事件。

您可以尝试使用剪辑区域,而不是调整大小。