FocusManager Класс

Определение

Вспомогательный класс, который обеспечивает глобальное управление действиями и событиями фокуса во всех элементах приложения.

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
Наследование
Object Platform::Object IInspectable FocusManager
Атрибуты

Примеры

Используйте TryMoveFocus для прохода между элементами пользовательского интерфейса с помощью клавиш со стрелками.

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);
   }
}

Комментарии

Мы рекомендуем по возможности использовать перенаправленные события фокуса UIElement вместо событий FocusManager.

FocusManager предназначен для расширенных сценариев, в которых определенные элементы в приложении не получают события с пузырьков из UIElement. Например, визуальные объекты наложения, такие как Popup, Tooltip или MenuFlyout, которые отображаются как часть пользовательского интерфейса приложения, но на самом деле являются их собственным фокусом область, а не частью иерархии визуального дерева. В случае всплывающего окна это происходит, когда вы программными средствами устанавливаете для Параметра IsOpen значение true и фокус перемещается в всплывающее окно и из него.

Ниже приведена базовая разметка для иллюстрации этого примера:

<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>

В этом случае Popup содержит StackPanel3, который, в свою очередь, содержит Button5. Если для параметра IsOpen задано значение true , а фокус перемещается с Button1 на Button5, LosingFocus события и LostFocus перемещаются вверх по визуальному дереву (StackPanel1, Gridи Page получают оба этих события). Однако получает только StackPanel3 последующие GettingFocus события и GotFocus , которые пузырьк вверх из Button5 (Grid и Page нет, так как они не находятся в отношениях "родители-потомки" с Popup).

Приложение может содержать несколько элементов с логическим фокусом (в зависимости от количества областей фокуса). Однако фокус клавиатуры может быть установлен только у одного элемента в приложении.

Может быть несколько элементов с логическим фокусом, но только один элемент с логическим фокусом на каждый фокус область. Элемент с логическим фокусом не обязательно имеет фокус клавиатуры, но элемент с фокусом клавиатуры имеет логический фокус.

Методы

FindFirstFocusableElement(DependencyObject)

Извлекает первый элемент, который может получить фокус на основе указанного область.

FindLastFocusableElement(DependencyObject)

Извлекает последний элемент, который может получить фокус на основе указанного область.

FindNextElement(FocusNavigationDirection)

Извлекает элемент, который должен получать фокус на основе указанного направления навигации.

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

Извлекает элемент, который должен получить фокус на основе указанного направления навигации (не может использоваться с навигацией по вкладкам, см. примечания).

FindNextFocusableElement(FocusNavigationDirection)

Извлекает элемент, который должен получать фокус на основе указанного направления навигации.

FindNextFocusableElement(FocusNavigationDirection, Rect)

Извлекает элемент, который должен получить фокус на основе указанного направления навигации и прямоугольника указания.

GetFocusedElement()

Извлекает элемент в пользовательском интерфейсе с фокусом.

GetFocusedElement(XamlRoot)

Извлекает элемент с фокусом в контейнере xaml island.

TryFocusAsync(DependencyObject, FocusState)

Асинхронно пытается установить фокус на элементе при инициализации приложения.

TryMoveFocus(FocusNavigationDirection)

Пытается изменить фокус с элемента с фокусом на следующий фокусируемый элемент в указанном направлении.

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

Пытается изменить фокус с элемента с фокусом на следующий фокусируемый элемент в указанном направлении, используя указанные параметры навигации.

TryMoveFocusAsync(FocusNavigationDirection)

Асинхронно пытается изменить фокус с текущего элемента с фокусом на следующий фокусируемый элемент в указанном направлении.

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

Асинхронно пытается изменить фокус с текущего элемента с фокусом на следующий фокусируемый элемент в указанном направлении с учетом указанных параметров навигации.

События

GettingFocus

Происходит до того, как элемент получит фокус. Это событие создается синхронно, чтобы фокус не перемещался во время восходящего события.

GotFocus

Происходит, когда элемент в элементе контейнера (область фокуса) получает фокус. Это событие возникает асинхронно, поэтому фокус может переместиться до завершения восходящего процесса.

LosingFocus

Происходит перед перемещением фокуса с текущего элемента с фокусом на целевой элемент. Это событие создается синхронно, чтобы фокус не перемещался во время восходящего события.

LostFocus

Происходит, когда элемент в элементе контейнера (область фокуса) теряет фокус. Это событие возникает асинхронно, поэтому фокус может снова переместиться до завершения восходящего движения.

Применяется к

См. также раздел