private static bool TryGetNotationAndDirection( MathBox mathBox, Key key, out LogicalDirection direction, out NotationBase notation ) { direction = LogicalDirection.Forward; InlineUIContainer forwardElement = mathBox.ForwardUiElement; InlineUIContainer backwardElement = mathBox.BackwardUiElement; InlineUIContainer inlineUiContainer = null; if (key == Key.Right && forwardElement != null) { inlineUiContainer = forwardElement; direction = LogicalDirection.Forward; } else if (key == Key.Left && backwardElement != null) { inlineUiContainer = backwardElement; direction = LogicalDirection.Backward; } if (!(inlineUiContainer?.Child is NotationBase control)) { notation = null; return(false); } notation = control; return(true); }
private static void MathBox_ChildFocusFailed(NotationBase sender, Direction direction) { var uiContainer = sender.FindParent <InlineUIContainer>(); var mathBox = uiContainer.FindParent <MathBox>(); LogicalDirection logicalDirection = ConvertDirectionToLogicalDirection(direction); mathBox.MoveCaretToTextElementBoundary(uiContainer, logicalDirection); mathBox.Focus(); }
private static void FocusMathElement(NotationBase notation, LogicalDirection direction) { if (direction == LogicalDirection.Forward) { notation.FocusFirst(); } else { notation.FocusLast(); } }
private static void FocusSibling(MathBox mathBox, Direction direction) { NotationBase parent = mathBox.FindParent <NotationBase>(); parent?.FocusDirection(direction); }