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); } })); } }