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. Например, визуальные объекты "наложения", такие как всплывающие, подсказкиили 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, FindNextElementOptions)

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

FindNextElement(FocusNavigationDirection)

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

FindNextFocusableElement(FocusNavigationDirection, Rect)

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

FindNextFocusableElement(FocusNavigationDirection)

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

GetFocusedElement()

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

GetFocusedElement(XamlRoot)

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

TryFocusAsync(DependencyObject, FocusState)

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

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

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

TryMoveFocus(FocusNavigationDirection)

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

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

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

TryMoveFocusAsync(FocusNavigationDirection)

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

События

GettingFocus

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

GotFocus

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

LosingFocus

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

LostFocus

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

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

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