FocusManager Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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. |