FocusManager Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Uma classe auxiliar que permite o gerenciamento global de ações de foco e eventos em todos os elementos em um aplicativo.
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
- Herança
- Atributos
Exemplos
Use TryMoveFocus para percorrer os elementos da interface do usuário usando as teclas de direção.
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);
}
}
Comentários
Recomendamos usar o UIElement concentrar eventos roteados em vez de eventos FocusManager sempre que possível.
O FocusManager destina-se a cenários avançados em que elementos específicos em um aplicativo não recebem eventos em bolhas de um UIElement. Por exemplo, objetos visuais de "sobreposição", como pop-up, de dica de ferramenta ou MenuFlyout que aparecem como parte da interface do usuário do aplicativo, mas na verdade são seu próprio escopo de foco e não fazem parte da hierarquia de árvore visual. No caso de umapop-up
Aqui está uma marcação básica para ilustrar o exemplo:
<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>
Nesse caso, um Popup
contém StackPanel3
, que, por sua vez, contém Button5
. Quando IsOpen é definido como true
e o foco passa de Button1
para Button5
, os eventos LosingFocus
e LostFocus
são espalhados pela árvore visual (StackPanel1
, o Grid
e os Page
obtêm esses dois eventos). No entanto, apenas StackPanel3
recebe os eventos GettingFocus
e GotFocus
subsequentes que se acumulam de Button5
(Grid
e Page
não, pois não estão em uma relação pai-filho com Popup
).
Um aplicativo pode ter vários elementos com foco lógico (dependendo do número de escopos de foco). No entanto, apenas um elemento no aplicativo pode ter o foco do teclado.
Pode haver vários elementos com foco lógico, mas apenas um elemento com foco lógico por escopo de foco. Um elemento com foco lógico não tem necessariamente o foco do teclado, mas um elemento com foco no teclado tem foco lógico.
Métodos
FindFirstFocusableElement(DependencyObject) |
Recupera o primeiro elemento que pode receber o foco com base no escopo especificado. |
FindLastFocusableElement(DependencyObject) |
Recupera o último elemento que pode receber o foco com base no escopo especificado. |
FindNextElement(FocusNavigationDirection, FindNextElementOptions) |
Recupera o elemento que deve receber o foco com base na direção de navegação especificada (não pode ser usado com a navegação de tabulação, consulte comentários). |
FindNextElement(FocusNavigationDirection) |
Recupera o elemento que deve receber o foco com base na direção de navegação especificada. |
FindNextFocusableElement(FocusNavigationDirection, Rect) |
Recupera o elemento que deve receber o foco com base na direção de navegação especificada e no retângulo de dica. |
FindNextFocusableElement(FocusNavigationDirection) |
Recupera o elemento que deve receber o foco com base na direção de navegação especificada. |
GetFocusedElement() |
Recupera o elemento na interface do usuário que tem foco. |
GetFocusedElement(XamlRoot) |
Recupera o elemento focalizado dentro do contêiner da ilha XAML. |
TryFocusAsync(DependencyObject, FocusState) |
Tenta de forma assíncrona definir o foco em um elemento quando o aplicativo é inicializado. |
TryMoveFocus(FocusNavigationDirection, FindNextElementOptions) |
Tenta alterar o foco do elemento com foco para o próximo elemento focalizável na direção especificada, usando as opções de navegação especificadas. |
TryMoveFocus(FocusNavigationDirection) |
Tenta alterar o foco do elemento com foco para o próximo elemento focalizável na direção especificada. |
TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions) |
Tenta de forma assíncrona alterar o foco do elemento atual com foco para o próximo elemento focalizável na direção especificada e sujeito às opções de navegação especificadas. |
TryMoveFocusAsync(FocusNavigationDirection) |
Tenta de forma assíncrona alterar o foco do elemento atual com foco para o próximo elemento focalizável na direção especificada. |
Eventos
GettingFocus |
Ocorre antes que um elemento realmente receba o foco. Esse evento é gerado de forma síncrona para garantir que o foco não seja movido enquanto o evento estiver borbulhando. |
GotFocus |
Ocorre quando um elemento dentro de um elemento de contêiner (um escopo de foco) recebe o foco. Esse evento é gerado de forma assíncrona, portanto, o foco pode se mover antes que o borbulhamento seja concluído. |
LosingFocus |
Ocorre antes que o foco se mova do elemento atual com foco para o elemento de destino. Esse evento é gerado de forma síncrona para garantir que o foco não seja movido enquanto o evento estiver borbulhando. |
LostFocus |
Ocorre quando um elemento dentro de um elemento de contêiner (um escopo de foco) perde o foco. Esse evento é gerado de forma assíncrona, portanto, o foco pode se mover novamente antes que o borbulhamento seja concluído. |
Aplica-se a
Confira também
- interações de teclado
- navegação em foco para teclado, gamepad, controle remoto e ferramentas de acessibilidade
- de navegação de foco programático