private void Owner_LayoutUpdated(object sender, object e)
        {
            var menu = RadRadialContextMenu.GetMenu(this.Owner);

            if (menu != null)
            {
                menu.LayoutUpdated -= this.Owner_LayoutUpdated;
                this.PositionMenu(menu);
            }
        }
        protected internal virtual void DetachFromTargetElement()
        {
            var menu = RadRadialContextMenu.GetMenu(this.Owner);

            if (menu != null)
            {
                menu.TargetElement = null;
            }

            PopupService.Detach();
        }
        /// <summary>
        /// It is used to detach the previous <see cref="RadRadialMenu"/> owner control.
        /// </summary>
        /// <param name="previousOwner"></param>
        protected override void OnDetached(FrameworkElement previousOwner)
        {
            if (previousOwner != null)
            {
                this.UnsubscribeFromTargetEvents(previousOwner);

                var menu = RadRadialContextMenu.GetMenu(previousOwner);

                if (menu != null)
                {
                    menu.LayoutUpdated -= this.Owner_LayoutUpdated;
                }

                base.OnDetached(previousOwner);
            }
        }
        /// <summary>
        /// It is used to position the <see cref="RadRadialMenu"/> and initiate menu position logic.
        /// </summary>
        protected internal virtual void AttachToTargetElement()
        {
            if (this.Owner == null)
            {
                return;
            }

            var menu = RadRadialContextMenu.GetMenu(this.Owner);

            if (menu != null && (PopupService.CurrentAttachedMenu != menu ||
                                 (PopupService.CurrentAttachedMenu != null && PopupService.CurrentAttachedMenu.TargetElement != this.Owner)))
            {
                menu.model.actionService.PushAction(
                    new DelegateAction(() =>
                {
                    if (menu.TargetElement != null)
                    {
                        var behavior = RadRadialContextMenu.GetBehavior(menu.TargetElement);

                        if (behavior != null)
                        {
                            behavior.DetachFromTargetElement();
                        }
                        else
                        {
                            this.DetachFromTargetElement();
                        }
                    }

                    menu.TargetElement = this.Owner;

                    PopupService.Attach(menu);

                    if (menu.DesiredSize.Height == 0 || menu.DesiredSize.Width == 0)
                    {
                        menu.LayoutUpdated += this.Owner_LayoutUpdated;
                    }
                    else
                    {
                        this.PositionMenu(menu);
                    }
                }));
            }
        }