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
- Наследование
- Атрибуты
Примеры
Используйте 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 |
Происходит, когда элемент в элементе контейнера (область фокуса) теряет фокус. Это событие возникает асинхронно, поэтому фокус может снова переместиться перед завершением пузырьков. |