/// <summary> /// Opens the current instance of the <see cref="RadRadialMenu"/>. /// </summary> internal void Open() { if (this.TargetElement != null) { var behavior = RadRadialContextMenu.GetBehavior(this.TargetElement); if (behavior != null) { behavior.AttachToTargetElement(); } } this.model.ShowView(); if (this.TargetElement != null) { PopupService.DisplayOverlay(); } this.CalculateRingsAspectRatio(); if (this.model.viewState.StartAngleLevels.Count > 0) { this.model.Layout.StartAngle = this.model.viewState.StartAngleLevels[0]; this.model.UpdateRingsRadius(); } }
/// <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); } })); } }
public static void SetBehavior(DependencyObject obj, RadialMenuTriggerBehavior value) { var oldBehavior = RadRadialContextMenu.GetBehavior(obj); var element = obj as FrameworkElement; if (oldBehavior != null && element != null) { oldBehavior.Owner = null; } if (obj != null) { obj.SetValue(BehaviorProperty, value); } if (value != null && element != null) { value.Owner = element; } }