FocusManager Classe

Definição

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
Object Platform::Object IInspectable FocusManager
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.

Aplica-se a

Confira também