Compartir a través de


FrameworkElement.PredictFocus(FocusNavigationDirection) Método

Definición

Determina el elemento siguiente que recibiría el foco relativo a este elemento para una dirección de movimiento de foco proporcionada, pero realmente no mueve el foco.

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

Parámetros

direction
FocusNavigationDirection

Dirección para la que se debe determinar un cambio de foco probable.

Devoluciones

Elemento siguiente al que el foco se movería si se atravesara el foco realmente. Puede devolver null si el foco no se puede mover en relación con este elemento para la dirección proporcionada.

Excepciones

Especificó una de las direcciones siguientes en TraversalRequest: Next, Previous, First, Last. Estas direcciones no son válidas para PredictFocus(FocusNavigationDirection) (pero son válidas para MoveFocus(TraversalRequest)).

Ejemplos

En el ejemplo siguiente se implementa un controlador que controla varias entradas de botón posibles, cada botón que representa un posible FocusNavigationDirection. El controlador realiza un seguimiento del elemento con el foco de teclado actual y llama PredictFocus a ese elemento y especifica el adecuado FocusNavigationDirection como inicialización para el TraversalRequest parámetro de tipo proporcionado. En lugar de pasar a ese elemento como MoveFocus lo haría, el controlador cambia las dimensiones físicas del destino de foco previsto con fines de visualización.

    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

Comentarios

MoveFocus es el método relacionado que realmente mueve el foco.

Se aplica a

Consulte también