private static bool TryMoveFocusWithOptionsImpl( FocusNavigationDirection focusNavigationDirection, FindNextElementOptions pFocusNavigationOverride) { IAsyncOperation <FocusMovementResult>?asyncOperation = null; var isFocusMoved = TryMoveFocusStatic(focusNavigationDirection, pFocusNavigationOverride, ref asyncOperation, false); return(isFocusMoved); }
private static IAsyncOperation <FocusMovementResult> TryMoveFocusWithOptionsAsyncImpl( FocusNavigationDirection focusNavigationDirection, FindNextElementOptions focusNavigationOptions) { IAsyncOperation <FocusMovementResult>?asyncOperation = null; var focusMoved = TryMoveFocusStatic(focusNavigationDirection, focusNavigationOptions, ref asyncOperation, true); return(asyncOperation ?? AsyncOperation.FromTask(ct => Task.FromResult(new FocusMovementResult()))); }
public static DependencyObject?FindNextElement(FocusNavigationDirection focusNavigationDirection, FindNextElementOptions focusNavigationOptions) { if (!Enum.IsDefined(typeof(FocusNavigationDirection), focusNavigationDirection)) { throw new ArgumentOutOfRangeException( nameof(focusNavigationDirection), "Invalid value of focus navigation direction was used."); } if (focusNavigationOptions is null) { throw new ArgumentNullException(nameof(focusNavigationOptions)); } return(FindNextElementWithOptionsImpl(focusNavigationDirection, focusNavigationOptions)); }
public static IAsyncOperation <FocusMovementResult> TryMoveFocusAsync(FocusNavigationDirection focusNavigationDirection, FindNextElementOptions focusNavigationOptions) { if (!Enum.IsDefined(typeof(FocusNavigationDirection), focusNavigationDirection)) { throw new ArgumentOutOfRangeException( nameof(focusNavigationDirection), "Invalid value of focus navigation direction was used."); } if (focusNavigationDirection == FocusNavigationDirection.Next || focusNavigationDirection == FocusNavigationDirection.Previous || focusNavigationDirection == FocusNavigationDirection.None) { throw new ArgumentOutOfRangeException( "Focus navigation directions Next, Previous, and None are not supported when using FindNextElementOptions", nameof(focusNavigationDirection)); } if (focusNavigationOptions is null) { throw new ArgumentNullException(nameof(focusNavigationOptions)); } return(TryMoveFocusAsyncImpl(focusNavigationDirection)); }
private static DependencyObject?FindNextElementWithOptionsImpl( FocusNavigationDirection focusNavigationDirection, FindNextElementOptions pFocusNavigationOverride) { var options = pFocusNavigationOverride; var xyFocusOptions = new XYFocusOptions { UpdateManifold = false }; var searchRoot = options.SearchRoot; var exclusionRect = options.ExclusionRect; var hintRect = options.HintRect; var navigationStrategyOverride = options.XYFocusNavigationStrategyOverride; var ignoreOcclusivity = options.IgnoreOcclusivity; ContentRoot?contentRoot = null; if (searchRoot != null) { contentRoot = VisualTree.GetContentRootForElement(searchRoot); } else if (InIslandsMode()) { // Return error if searchRootAsDO is not valid in islands/desktop mode throw new InvalidOperationException("Search root is not a dependency object."); } else { contentRoot = DXamlCore.Current.GetHandle().ContentRootCoordinator.CoreWindowContentRoot; } // If we are being passed in the public root visual of the XamlRoot as the SearchRoot, then override the SearchRoot to be the RootVisual. // This will enable searching through both the public root visual and the popup root. We will also allow Next/Prev. var shouldOverrideSearchRoot = contentRoot != null && GetAppVisibleXamlRootContent(contentRoot) == searchRoot; if (shouldOverrideSearchRoot) { searchRoot = contentRoot !.VisualTree.RootElement; } else { if (focusNavigationDirection != FocusNavigationDirection.Up && focusNavigationDirection != FocusNavigationDirection.Down && focusNavigationDirection != FocusNavigationDirection.Left && focusNavigationDirection != FocusNavigationDirection.Right) { throw new ArgumentOutOfRangeException( "Focus navigation directions Next, Previous, and None " + "are not supported when using FindNextElementOptions"); } } if (searchRoot != null) { xyFocusOptions.SearchRoot = searchRoot; } if (!exclusionRect.IsUniform) { xyFocusOptions.ExclusionRect = exclusionRect; } if (!hintRect.IsUniform) { xyFocusOptions.FocusHintRectangle = hintRect; } xyFocusOptions.NavigationStrategyOverride = navigationStrategyOverride; xyFocusOptions.IgnoreOcclusivity = ignoreOcclusivity; var candidate = FindNextFocus(focusNavigationDirection, xyFocusOptions); return(candidate as DependencyObject); }