Skip to main content
.NET Framework Class Library
FrameworkElementPredictFocus 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.

Namespace:   System.Windows
Assembly:  PresentationFramework (in PresentationFramework.dll)
Public Overrides NotOverridable Function PredictFocus ( _
	direction As [%$TOPIC/ms598263_en-us_VS_110_1_0_0_0_0%] _
) As [%$TOPIC/ms598263_en-us_VS_110_1_0_0_0_1%]
public override sealed [%$TOPIC/ms598263_en-us_VS_110_1_0_1_0_0%] PredictFocus(
	[%$TOPIC/ms598263_en-us_VS_110_1_0_1_0_1%] direction
virtual [%$TOPIC/ms598263_en-us_VS_110_1_0_2_0_0%]^ PredictFocus(
	[%$TOPIC/ms598263_en-us_VS_110_1_0_2_0_1%] direction
) override sealed
abstract PredictFocus : 
        direction:[%$TOPIC/ms598263_en-us_VS_110_1_0_3_0_0%] -> [%$TOPIC/ms598263_en-us_VS_110_1_0_3_0_1%]  
override PredictFocus : 
        direction:[%$TOPIC/ms598263_en-us_VS_110_1_0_3_0_2%] -> [%$TOPIC/ms598263_en-us_VS_110_1_0_3_0_3%]


Type: System.Windows.InputFocusNavigationDirection

The direction for which a prospective focus change should be determined.

Return Value

Type: System.WindowsDependencyObject
The next element that focus would move to if focus were actually traversed. May return if focus cannot be moved relative to this element for the provided direction.

Specified one of the following directions in the TraversalRequest: Next, Previous, First, Last. These directions are not legal for PredictFocus (but they are legal for MoveFocus).


MoveFocus is the related method that actually does move focus.


The following example implements a handler that handles several possible button inputs, each button representing a possible 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. 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 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
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;
Version Information

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.