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 del 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 de burbujas 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 en realidad son su propio ámbito de enfoque y no forman parte de la jerarquía de árboles visuales. 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 Gridobtienen 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 elemento primario-secundario con Popup).

Una aplicación puede tener varios elementos con foco lógico (dependiendo del número de ámbitos de enfoque). 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 foco. Un elemento con foco lógico no tiene necesariamente el foco del teclado, pero un elemento con foco de teclado tiene el foco lógico.

Métodos

Nombre Description
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, 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 los comentarios).

FindNextElement(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 sugerencia especificados.

FindNextFocusableElement(FocusNavigationDirection)

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

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 de forma asincrónica el foco en un elemento cuando se inicializa la aplicación.

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

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

TryMoveFocus(FocusNavigationDirection)

Intenta cambiar el foco del elemento con el foco al siguiente elemento enfocado 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 enfocado en la dirección especificada y sujeto a 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 enfocado en la dirección especificada.

Eventos

Nombre Description
GettingFocus

Se produce antes de que un elemento reciba realmente el foco. Este evento se genera sincrónicamente 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 sincrónicamente 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 volver a moverse antes de que se complete la propagación.

Se aplica a

Consulte también