Udostępnij za pośrednictwem


FrameworkElement.PredictFocus(FocusNavigationDirection) Metoda

Definicja

Określa następny element, który będzie otrzymywać fokus względem tego elementu dla podanego kierunku ruchu fokusu, ale w rzeczywistości nie przenosi fokusu.

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

Parametry

direction
FocusNavigationDirection

Kierunek, dla którego należy określić potencjalną zmianę fokusu.

Zwraca

DependencyObject

Następny element, do którego zostanie przeniesiony fokus, gdyby fokus został rzeczywiście przeniesiony. Może wrócić null , jeśli nie można przenieść fokusu względem tego elementu dla podanego kierunku.

Wyjątki

Określono jeden z następujących wskazówek w elemecie TraversalRequest: Next, Previous, First, Last. Te wskazówki nie są legalne dla PredictFocus(FocusNavigationDirection) (ale są one legalne dla MoveFocus(TraversalRequest)programu ).

Przykłady

Poniższy przykład implementuje procedurę obsługi, która obsługuje kilka możliwych danych wejściowych przycisków, każdy przycisk reprezentujący możliwy FocusNavigationDirectionelement . Procedura obsługi śledzi element z bieżącym fokusem klawiatury i wywołuje PredictFocus ten element i określa odpowiedni FocusNavigationDirection sposób inicjowania podanego parametru TraversalRequest typu. Zamiast przechodzić do tego elementu w taki sposób MoveFocus , procedura obsługi zmienia fizyczne wymiary przewidywanego miejsca docelowego fokusu na potrzeby wizualizacji.

    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

Uwagi

MoveFocus to powiązana metoda, która rzeczywiście przenosi fokus.

Dotyczy

Zobacz też