Share via


FocusManager Classe

Definição

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
Object Platform::Object IInspectable FocusManager
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 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 da á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 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 LosingFocus eventos e LostFocus bolhas na árvore visual (StackPanel1, o Gride obter Page esses dois eventos). No entanto, só StackPanel3 recebe os eventos subsequentes GettingFocus e GotFocus 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)

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 de guia, 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 focado 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 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