FocusManager Classe

Définition

Classe d’assistance qui permet la gestion globale des actions et des événements de focus sur tous les éléments d’une application.

public ref class FocusManager sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class FocusManager final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class FocusManager
Public NotInheritable Class FocusManager
Héritage
Object Platform::Object IInspectable FocusManager
Attributs

Configuration requise pour Windows

Famille d’appareils
Windows 10 (introduit dans 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduit dans v1.0)

Exemples

Utilisez TryMoveFocus pour parcourir les éléments d’interface utilisateur à l’aide des touches de direction.

private void Page_KeyUp(object sender, KeyRoutedEventArgs e)
{
   if (e.Key == Windows.System.VirtualKey.Up)
   {
      // Mimic Shift+Tab when user hits up arrow key.
      FocusManager.TryMoveFocus(FocusNavigationDirection.Previous);
   }
   else if (e.Key == Windows.System.VirtualKey.Down)
   {
      // Mimic Tab when user hits down arrow key.
      FocusManager.TryMoveFocus(FocusNavigationDirection.Next);
   }
}

Remarques

Nous vous recommandons d’utiliser les événements routés du focus UIElement au lieu des événements FocusManager dans la mesure du possible.

FocusManager est destiné aux scénarios avancés où des éléments spécifiques d’une application ne reçoivent pas d’événements en bulles d’un élément UIElement. Par exemple, les objets visuels « superposés » tels que Popup, Tooltip ou MenuFlyout qui apparaissent dans l’interface utilisateur de l’application, mais qui sont en fait leur propre étendue de focus et ne font pas partie de la hiérarchie de l’arborescence visuelle. Dans le cas d’une fenêtre contextuelle, cela se produit lorsque vous définissez par programmation IsOpen sur true et que le focus se déplace vers et hors de la fenêtre contextuelle.

Voici quelques balises de base pour illustrer l’exemple :

<Page …>
    <Grid …>
        <Popup …>
            <StackPanel Name="StackPanel3" …>
                <TextBlock Text="StackPanel3" />
                <Button Content="Button5" …/>
            </StackPanel>
        </Popup>
        <TextBlock Text="Grid" … />
        <StackPanel Name="StackPanel1" …>
            <TextBlock Text="StackPanel1" …/>
            <Button Content="Button1" …/>
            <Button Content="Button2" … />
        </StackPanel>
        <StackPanel Name="StackPanel2" …>
            <TextBlock Text="StackPanel2" …/>
            <Button Content="Button3" … />
            <Button Content="Button4" … />
        </StackPanel>
    </Grid>
</Page>

Dans ce cas, une fenêtre contextuelle contient StackPanel3, qui, à son tour, contient Button5. Lorsque IsOpen est défini sur true et que le focus passe de Button1 à Button5, les événements LosingFocus et LostFocus s’affichent dans l’arborescence visuelle (StackPanel1, Grid et Page obtiennent ces deux événements). Toutefois, seul StackPanel3 reçoit les événements GettingFocus et GotFocus suivants qui s’affichent à partir de Button5 (Grid et Page ne sont pas dans une relation parent-enfant avec Popup).

Une application peut avoir plusieurs éléments avec le focus logique (en fonction du nombre d’étendues de focus). Toutefois, un seul élément de l’application peut avoir le focus clavier.

Il peut y avoir plusieurs éléments avec le focus logique, mais un seul élément avec le focus logique par étendue de focus. Un élément avec le focus logique n’a pas nécessairement le focus clavier, mais un élément avec le focus clavier a le focus logique.

Historique des versions

Version de Windows Version du SDK Valeur ajoutée
1703 15063 FindFirstFocusableElement
1703 15063 FindLastFocusableElement
1703 15063 FindNextElement(FocusNavigationDirection)
1703 15063 FindNextElement(FocusNavigationDirection,FindNextElementOptions)
1703 15063 TryMoveFocus(FocusNavigationDirection,FindNextElementOptions)
1803 17134 TryFocusAsync
1803 17134 TryMoveFocusAsync(FocusNavigationDirection)
1803 17134 TryMoveFocusAsync(FocusNavigationDirection,FindNextElementOptions)
1809 17763 GettingFocus
1809 17763 GotFocus
1809 17763 LosingFocus
1809 17763 LostFocus
1903 18362 GetFocusedElement(XamlRoot)

Méthodes

FindFirstFocusableElement(DependencyObject)

Récupère le premier élément qui peut recevoir le focus en fonction de l’étendue spécifiée.

FindLastFocusableElement(DependencyObject)

Récupère le dernier élément qui peut recevoir le focus en fonction de l’étendue spécifiée.

FindNextElement(FocusNavigationDirection)

Récupère l’élément qui doit recevoir le focus en fonction de la direction de navigation spécifiée.

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

Récupère l’élément qui doit recevoir le focus en fonction de la direction de navigation spécifiée (ne peut pas être utilisé avec la navigation par onglet, voir les remarques).

FindNextFocusableElement(FocusNavigationDirection)

Récupère l’élément qui doit recevoir le focus en fonction de la direction de navigation spécifiée.

FindNextFocusableElement(FocusNavigationDirection, Rect)

Récupère l’élément qui doit recevoir le focus en fonction de la direction de navigation et du rectangle d’indicateur spécifiés.

GetFocusedElement()

Récupère l’élément dans l’interface utilisateur qui a le focus.

GetFocusedElement(XamlRoot)

Récupère l’élément prioritaire dans le conteneur d’îlot Xaml.

TryFocusAsync(DependencyObject, FocusState)

Tente de façon asynchrone de définir le focus sur un élément lors de l’initialisation de l’application.

TryMoveFocus(FocusNavigationDirection)

Tente de faire passer le focus de l’élément avec le focus à l’élément suivant dans la direction spécifiée.

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

Tente de remplacer le focus de l’élément avec focus sur l’élément suivant dans la direction spécifiée, à l’aide des options de navigation spécifiées.

TryMoveFocusAsync(FocusNavigationDirection)

Tente de façon asynchrone de modifier le focus de l’élément actif avec le focus sur l’élément suivant dans la direction spécifiée.

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

Tente de façon asynchrone de modifier le focus de l’élément actif avec le focus sur l’élément suivant dans la direction spécifiée et soumis aux options de navigation spécifiées.

Événements

GettingFocus

Se produit avant qu’un élément ne reçoive réellement le focus. Cet événement est déclenché de manière synchrone pour garantir que le focus n’est pas déplacé pendant que l’événement est en cours de bulle.

GotFocus

Se produit lorsqu’un élément au sein d’un élément conteneur (une étendue de focus) reçoit le focus. Cet événement est déclenché de façon asynchrone, de sorte que le focus peut se déplacer avant la fin du bullenement.

LosingFocus

Se produit avant que le focus ne passe de l’élément actuel avec focus à l’élément cible. Cet événement est déclenché de manière synchrone pour garantir que le focus n’est pas déplacé pendant que l’événement est en cours de bulle.

LostFocus

Se produit lorsqu’un élément au sein d’un élément conteneur (une étendue de focus) perd le focus. Cet événement est déclenché de manière asynchrone, de sorte que le focus peut se déplacer à nouveau avant que le bouillonnement ne soit terminé.

S’applique à

Voir aussi