FrameworkElement.PredictFocus(FocusNavigationDirection) FrameworkElement.PredictFocus(FocusNavigationDirection) FrameworkElement.PredictFocus(FocusNavigationDirection) FrameworkElement.PredictFocus(FocusNavigationDirection) Method

定义

根据提供的焦点移动方向,确定在此元素之后接收焦点的下一个元素,但不实际移动焦点。Determines the next element that would receive focus relative to this element for a provided focus movement direction, but does not actually move the focus.

public:
 override System::Windows::DependencyObject ^ PredictFocus(System::Windows::Input::FocusNavigationDirection direction);
public override sealed System.Windows.DependencyObject PredictFocus (System.Windows.Input.FocusNavigationDirection direction);
override this.PredictFocus : System.Windows.Input.FocusNavigationDirection -> System.Windows.DependencyObject
Public Overrides NotOverridable Function PredictFocus (direction As FocusNavigationDirection) As DependencyObject

参数

direction
FocusNavigationDirection FocusNavigationDirection FocusNavigationDirection FocusNavigationDirection

应确定其预期焦点更改的方向。The direction for which a prospective focus change should be determined.

返回

如果实际遍历了焦点,则为焦点将要移到的下一个元素。The next element that focus would move to if focus were actually traversed. 如果焦点不能按提供的方向相对于此元素移动,则可能返回 nullMay return null if focus cannot be moved relative to this element for the provided direction.

异常

TraversalRequest 中指定了以下方向之一:NextPreviousFirstLastSpecified one of the following directions in the TraversalRequest: Next, Previous, First, Last. 对于 PredictFocus(FocusNavigationDirection) 来说,这些方向是非法的(但对于 MoveFocus(TraversalRequest) 来说是合法的)。These directions are not legal for PredictFocus(FocusNavigationDirection) (but they are legal for MoveFocus(TraversalRequest)).

示例

下面的示例实现一个处理程序, 该处理程序处理几个可能的按钮输入FocusNavigationDirection, 每个按钮表示一个可能的。The following example implements a handler that handles several possible button inputs, each button representing a possible FocusNavigationDirection. 处理程序跟踪具有当前键盘焦点的元素, 并对PredictFocus该元素调用, 并为TraversalRequest提供的FocusNavigationDirection类型参数指定相应的。The handler tracks the element with current keyboard focus, and calls PredictFocus on that element, and specifies the appropriate FocusNavigationDirection as initialization for the TraversalRequest type parameter provided. 处理程序不像MoveFocus那样移动到该元素, 而是出于可视化目的更改预测焦点目标的物理尺寸。Instead of moving to that element as MoveFocus would do, the handler changes the physical dimensions of the predicted focus destination for visualization purposes.

private void OnPredictFocus(object sender, RoutedEventArgs e)
{
    DependencyObject predictionElement = null;

    UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;

    if (elementWithFocus != null)
    {
        // Only these four directions are currently supported
        // by PredictFocus, so we need to filter on these only.
        if ((_focusMoveValue == FocusNavigationDirection.Up) ||
            (_focusMoveValue == FocusNavigationDirection.Down) ||
            (_focusMoveValue == FocusNavigationDirection.Left) ||
            (_focusMoveValue == FocusNavigationDirection.Right))
        {

            // Get the element which would receive focus if focus were changed.
            predictionElement = elementWithFocus.PredictFocus(_focusMoveValue);
           
            Control controlElement = predictionElement as Control;

            // If a ContentElement.
            if (controlElement != null)
            {
                controlElement.Foreground = Brushes.DarkBlue;
                controlElement.FontSize += 10;
                controlElement.FontWeight = FontWeights.ExtraBold;

                // Fields used to reset the UI when the mouse 
                // button is released.
                _focusPredicted = true;
                _predictedControl = controlElement;
            }
        }
    }
}
Private Sub OnPredictFocus(ByVal sender As Object, ByVal e As RoutedEventArgs)
	Dim predictionElement As DependencyObject = Nothing

	Dim elementWithFocus As UIElement = TryCast(Keyboard.FocusedElement, UIElement)

	If elementWithFocus IsNot Nothing Then
		' Only these four directions are currently supported
		' by PredictFocus, so we need to filter on these only.
		If (_focusMoveValue = FocusNavigationDirection.Up) OrElse (_focusMoveValue = FocusNavigationDirection.Down) OrElse (_focusMoveValue = FocusNavigationDirection.Left) OrElse (_focusMoveValue = FocusNavigationDirection.Right) Then

			' Get the element which would receive focus if focus were changed.
			predictionElement = elementWithFocus.PredictFocus(_focusMoveValue)

			Dim controlElement As Control = TryCast(predictionElement, Control)

			' If a ContentElement.
			If controlElement IsNot Nothing Then
				controlElement.Foreground = Brushes.DarkBlue
				controlElement.FontSize += 10
				controlElement.FontWeight = FontWeights.ExtraBold

				' Fields used to reset the UI when the mouse 
				' button is released.
				_focusPredicted = True
				_predictedControl = controlElement
			End If
		End If
	End If
End Sub

注解

MoveFocus是实际移动焦点的相关方法。MoveFocus is the related method that actually does move focus.

适用于

另请参阅