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(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
Herencia
Object Platform::Object IInspectable FocusManager
Atributos

Requisitos de Windows

Familia de dispositivos
Windows 10 (se introdujo en la versión 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)

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 elemento emergente contiene StackPanel3, que, a su vez, contiene Button5. Cuando IsOpen se establece en true y el foco se mueve de Button1 a Button5, los eventos LosingFocus y LostFocus se propagan por el árbol visual (StackPanel1, Grid y Page obtienen ambos eventos). Sin embargo, solo StackPanel3 recibe los eventos GettingFocus y GotFocus subsiguientes que se propagan desde 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.

Historial de versiones

Versión de Windows Versión del SDK Valor agregado
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 PerderFocus
1809 17763 LostFocus
1903 18362 GetFocusedElement(XamlRoot)

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