private static bool UpdateSourceOfElement(DependencyObject doTarget, DependencyObject doAncestor, DependencyObject doOldParent) { bool calledOut = false; PresentationSource realSource = FindSource(doTarget); PresentationSource cachedSource = CriticalGetPresentationSourceFromElement(doTarget, CachedSourceProperty); if (cachedSource != realSource) { doTarget.SetValue(CachedSourceProperty, new SecurityCriticalDataForMultipleGetAndSet <PresentationSource>(realSource)); SourceChangedEventArgs args = new SourceChangedEventArgs(cachedSource, realSource); args.RoutedEvent = SourceChangedEvent; if (InputElement.IsUIElement(doTarget)) { ((UIElement)doTarget).RaiseEvent(args); } else if (InputElement.IsContentElement(doTarget)) { ((ContentElement)doTarget).RaiseEvent(args); } else { ((UIElement3D)doTarget).RaiseEvent(args); } calledOut = true; } return(calledOut); }
private bool RaiseContextMenuOpeningEvent(IInputElement source, double x, double y, bool userInitiated) { ContextMenuEventArgs contextMenuEventArgs = new ContextMenuEventArgs(source, true, x, y); DependencyObject dependencyObject = source as DependencyObject; if (userInitiated && dependencyObject != null) { if (InputElement.IsUIElement(dependencyObject)) { ((UIElement)dependencyObject).RaiseEvent(contextMenuEventArgs, userInitiated); } else if (InputElement.IsContentElement(dependencyObject)) { ((ContentElement)dependencyObject).RaiseEvent(contextMenuEventArgs, userInitiated); } else if (InputElement.IsUIElement3D(dependencyObject)) { ((UIElement3D)dependencyObject).RaiseEvent(contextMenuEventArgs, userInitiated); } else { source.RaiseEvent(contextMenuEventArgs); } } else { source.RaiseEvent(contextMenuEventArgs); } if (contextMenuEventArgs.Handled) { this.RaiseToolTipClosingEvent(true); return(true); } DependencyObject targetElement = contextMenuEventArgs.TargetElement; if (targetElement != null && ContextMenuService.ContextMenuIsEnabled(targetElement)) { object contextMenu = ContextMenuService.GetContextMenu(targetElement); ContextMenu contextMenu2 = contextMenu as ContextMenu; contextMenu2.SetValue(PopupControlService.OwnerProperty, targetElement); contextMenu2.Closed += this.OnContextMenuClosed; if (x == -1.0 && y == -1.0) { contextMenu2.Placement = PlacementMode.Center; } else { contextMenu2.Placement = PlacementMode.MousePoint; } this.RaiseToolTipClosingEvent(true); contextMenu2.SetCurrentValueInternal(ContextMenu.IsOpenProperty, BooleanBoxes.TrueBox); return(true); } return(false); }
internal static void RaiseAutomationEvents() { if (InputElement.IsUIElement(InputManager.ListeningElement)) { UIElement e = (UIElement)InputManager.ListeningElement; //Raise InputDiscarded automation event SynchronizedInputHelper.RaiseAutomationEvent(e.GetAutomationPeer()); } else if (InputElement.IsContentElement(InputManager.ListeningElement)) { ContentElement ce = (ContentElement)InputManager.ListeningElement; //Raise InputDiscarded automation event SynchronizedInputHelper.RaiseAutomationEvent(ce.GetAutomationPeer()); } else if (InputElement.IsUIElement3D(InputManager.ListeningElement)) { UIElement3D e3D = (UIElement3D)InputManager.ListeningElement; //Raise InputDiscarded automation event SynchronizedInputHelper.RaiseAutomationEvent(e3D.GetAutomationPeer()); } }
private bool RaiseContextMenuOpeningEvent(IInputElement source, double x, double y, bool userInitiated) { // Fire the event ContextMenuEventArgs args = new ContextMenuEventArgs(source, true /* opening */, x, y); DependencyObject sourceDO = source as DependencyObject; if (userInitiated && sourceDO != null) { if (InputElement.IsUIElement(sourceDO)) { ((UIElement)sourceDO).RaiseEvent(args, userInitiated); } else if (InputElement.IsContentElement(sourceDO)) { ((ContentElement)sourceDO).RaiseEvent(args, userInitiated); } else if (InputElement.IsUIElement3D(sourceDO)) { ((UIElement3D)sourceDO).RaiseEvent(args, userInitiated); } else { source.RaiseEvent(args); } } else { source.RaiseEvent(args); } if (!args.Handled) { // No one handled the event, auto show any available ContextMenus // Saved from the bubble up the tree where we looked for a set ContextMenu property DependencyObject o = args.TargetElement; if ((o != null) && ContextMenuService.ContextMenuIsEnabled(o)) { // Retrieve the value object menu = ContextMenuService.GetContextMenu(o); ContextMenu cm = menu as ContextMenu; cm.SetValue(OwnerProperty, o); cm.Closed += new RoutedEventHandler(OnContextMenuClosed); if ((x == -1.0) && (y == -1.0)) { // We infer this to mean that the ContextMenu was opened with the keyboard cm.Placement = PlacementMode.Center; } else { // If there is a CursorLeft and CursorTop, it was opened with the mouse. cm.Placement = PlacementMode.MousePoint; } // Clear any open tooltips RaiseToolTipClosingEvent(true /*reset */); cm.SetCurrentValueInternal(ContextMenu.IsOpenProperty, BooleanBoxes.TrueBox); return(true); // A menu was opened } return(false); // There was no menu to open } // Clear any open tooltips since someone else opened one RaiseToolTipClosingEvent(true /*reset */); return(true); // The event was handled by someone else }