protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            base.OnMouseDown(e);

            ParentTaskbarIcon.CloseBalloon();

            if (Click != null && e.LeftButton == MouseButtonState.Pressed)
            {
                Click.Invoke(this, EventArgs.Empty);
            }
        }
        protected override void OnMouseEnter(MouseEventArgs e)
        {
            base.OnMouseEnter(e);

            if (isClosing)
            {
                return;
            }

            // Prevent closing
            CloseTime = CloseTime.AddMilliseconds(SecondaryCloseDelayTime);
            ParentTaskbarIcon.ResetBalloonCloseTimer();
        }
        protected void ScheduleClose(int closeDelay = 0)
        {
            Dispatcher.Invoke(new Action(async() => {
                // Declare intent
                CloseTime = DateTime.Now.AddMilliseconds(closeDelay);
                await Task.Delay(closeDelay);

                // Override check
                if (CloseTime == null || DateTime.Now < CloseTime)
                {
                    return;
                }

                ParentTaskbarIcon.CloseBalloon();
            }), DispatcherPriority.ContextIdle);
        }