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 e eventos de foco em todos os elementos em um aplicativo.
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
- Herança
- Atributos
Requisitos do Windows
Família de dispositivos |
Windows 10 (introduzida na 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (introduzida na v1.0)
|
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
É recomendável usar os eventos roteados de foco UIElement 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 bolhas de um UIElement. Por exemplo, objetos visuais de "sobreposição", como Pop-up, 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 um pop-up, isso ocorre quando você define programaticamente IsOpen como true e o foco entra e sai do pop-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 pop-up 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 aparecem na árvore visual (StackPanel1, Grid e Page obtêm esses dois eventos). No entanto, somente StackPanel3 recebe os eventos GettingFocus e GotFocus subsequentes que surgem de Button5 (Grade e Página 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.
Histórico de versão
Versão do Windows | Versão do SDK | Valor adicionado |
---|---|---|
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 | LosingFocus |
1809 | 17763 | LostFocus |
1903 | 18362 | GetFocusedElement(XamlRoot) |
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) |
Recupera o elemento que deve receber o foco com base na direção de navegação especificada. |
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 por tabulação, consulte comentários). |
FindNextFocusableElement(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. |
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) |
Tenta alterar o foco do elemento com foco para o próximo elemento focalizável na direção especificada. |
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. |
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. |
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. |
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 a propagação seja concluída. |
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 a propagação seja concluída. |