FocusManager Clase

Definición

Clase auxiliar que permite la administración global de acciones y eventos de foco en todos los elementos de una aplicación.

public ref class FocusManager sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 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(Microsoft.UI.Xaml.WinUIContract), 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
Herencia
Object Platform::Object IInspectable FocusManager
Atributos

Ejemplos

Use TryMoveFocus para recorrer entre los elementos de la interfaz de usuario mediante las teclas de dirección.

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);
   }
}

Comentarios

Se recomienda usar los eventos enrutados de foco UIElement en lugar de los eventos focusManager siempre que sea posible.

FocusManager está pensado para escenarios avanzados en los que los elementos específicos de una aplicación no reciben eventos burbujados de un UIElement. Por ejemplo, objetos visuales "superpuestos", como popup, información sobre herramientas o MenuFlyout que aparecen como parte de la interfaz de usuario de la aplicación, pero son realmente su propio ámbito de enfoque y no forman parte de la jerarquía de árbol visual. En el caso de un elemento emergente, esto se produce cuando se establece mediante programación IsOpen en true y el foco se mueve dentro y fuera del elemento emergente.

Este es un marcado básico para ilustrar el ejemplo:

<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>

En este caso, un Popup objeto contiene StackPanel3, que, a su vez, contiene Button5. Cuando IsOpen se establece true en y el foco se mueve de Button1 a Button5, los LosingFocus eventos y LostFocus se propagan por el árbol visual (StackPanel1, y Grid, y obtienen Page ambos eventos). Sin embargo, solo StackPanel3 recibe los eventos y GotFocus posteriores GettingFocus que se propagan de Button5 (Grid y Page no, ya que no están en una relación de elementos primarios y secundarios con Popup).

Una aplicación puede tener varios elementos con foco lógico (según el número de ámbitos de foco). Sin embargo, solo un elemento de la aplicación puede tener el foco del teclado.

Puede haber varios elementos con foco lógico, pero solo un elemento con foco lógico por ámbito de enfoque. Un elemento con foco lógico no tiene necesariamente el foco del teclado, pero un elemento con foco de teclado tiene foco lógico.

Métodos

FindFirstFocusableElement(DependencyObject)

Recupera el primer elemento que puede recibir el foco en función del ámbito especificado.

FindLastFocusableElement(DependencyObject)

Recupera el último elemento que puede recibir el foco en función del ámbito especificado.

FindNextElement(FocusNavigationDirection)

Recupera el elemento que debe recibir el foco en función de la dirección de navegación especificada.

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

Recupera el elemento que debe recibir el foco en función de la dirección de navegación especificada (no se puede usar con la navegación por tabulación, vea comentarios).

FindNextFocusableElement(FocusNavigationDirection)

Recupera el elemento que debe recibir el foco en función de la dirección de navegación especificada.

FindNextFocusableElement(FocusNavigationDirection, Rect)

Recupera el elemento que debe recibir el foco en función de la dirección de navegación y el rectángulo de sugerencias especificados.

GetFocusedElement()

Recupera el elemento de la interfaz de usuario que tiene el foco.

GetFocusedElement(XamlRoot)

Recupera el elemento centrado dentro del contenedor de islas XAML.

TryFocusAsync(DependencyObject, FocusState)

Intenta establecer el foco de forma asincrónica en un elemento cuando se inicializa la aplicación.

TryMoveFocus(FocusNavigationDirection)

Intenta cambiar el foco del elemento con el foco al siguiente elemento que se puede centrar en la dirección especificada.

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

Intenta cambiar el foco del elemento con el foco al siguiente elemento que se puede centrar en la dirección especificada, utilizando las opciones de navegación especificadas.

TryMoveFocusAsync(FocusNavigationDirection)

Intenta cambiar de forma asincrónica el foco del elemento actual con el foco al siguiente elemento que se puede centrar en la dirección especificada.

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

Intenta cambiar de forma asincrónica el foco del elemento actual con el foco al siguiente elemento que se puede centrar en la dirección especificada y sujeto a las opciones de navegación especificadas.

Eventos

GettingFocus

Se produce antes de que un elemento reciba realmente el foco. Este evento se genera de forma sincrónica para asegurarse de que el foco no se mueve mientras el evento se propaga.

GotFocus

Se produce cuando un elemento dentro de un elemento contenedor (un ámbito de foco) recibe el foco. Este evento se genera de forma asincrónica, por lo que el foco podría moverse antes de que se complete la propagación.

LosingFocus

Se produce antes de que el foco se mueva del elemento actual con el foco al elemento de destino. Este evento se genera de forma sincrónica para asegurarse de que el foco no se mueve mientras el evento se propaga.

LostFocus

Se produce cuando un elemento dentro de un elemento contenedor (un ámbito de foco) pierde el foco. Este evento se genera de forma asincrónica, por lo que el foco podría moverse de nuevo antes de que se complete el propagamiento.

Se aplica a

Consulte también