/// <summary>
        /// The on is pinned property changed.
        /// </summary>
        /// <param name="d">
        /// The d.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        private static void OnIsPinnedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var tooltip = (PinnableTooltip)d;

            if ((bool)e.NewValue)
            {
                if (tooltip.adornerDragDrop == null && tooltip.adorner != null)
                {
                    tooltip.adornerDragDrop = ControlAdornerDragDrop.Attach(tooltip.adorner);
                }

                if (tooltip.IsTimerEnabled)
                {
                    tooltip.timer.StopAndReset();
                }
            }
            else
            {
                if (tooltip.adornerDragDrop != null)
                {
                    ControlAdornerDragDrop.Detach(tooltip.adornerDragDrop);
                    tooltip.adornerDragDrop = null;
                }

                tooltip.IsOpen = false;
            }
        }
        /// <summary>
        ///     The create adorner.
        /// </summary>
        private void CreateAdorner()
        {
            if (this.adorner != null || (Application.Current.MainWindow == null && this.userDefinedAdorner == null))
            {
                return;
            }

            var adornedElement = this.GetAdornerElement();

            if (adornedElement == null)
            {
                return;
            }

            AdornerLayer layer = AdornerLayer.GetAdornerLayer(adornedElement);

            if (layer == null)
            {
                return;
            }

            this.isPositionCalculated = false;
            var ad = new ControlAdorner(adornedElement)
            {
                Child = this, Focusable = false
            };

            KeyboardNavigation.SetTabNavigation(ad, KeyboardNavigationMode.None);
            layer.Add(ad);
            this.adorner      = ad;
            this.adornerLayer = layer;

            if (this.IsPinned && this.adornerDragDrop == null)
            {
                this.adornerDragDrop = ControlAdornerDragDrop.Attach(this.adorner);
            }

            this.RegisterBeingInFront();
        }
        /// <summary>
        /// Brings pinned toooltip to front.
        /// </summary>
        public void BringToFront()
        {
            if (this.IsInFront())
            {
                return;
            }

            if (this.IsPinned && this.adorner != null)
            {
                if (this.adornerDragDrop != null)
                {
                    ControlAdornerDragDrop.Detach(this.adornerDragDrop);
                    this.adornerDragDrop = null;
                }

                this.adornerLayer.Remove(this.adorner);

                var adornedElement = this.GetAdornerElement();
                if (adornedElement == null)
                {
                    return;
                }

                this.adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement);
                if (this.adornerLayer == null)
                {
                    return;
                }

                this.adornerLayer.Add(this.adorner);

                if (this.IsPinned && this.adornerDragDrop == null)
                {
                    this.adornerDragDrop = ControlAdornerDragDrop.Attach(this.adorner);
                }

                this.RegisterBeingInFront();
            }
        }