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. Например, визуальные объекты наложения, такие как 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 |
Происходит, когда элемент в элементе контейнера (область фокуса) теряет фокус. Это событие возникает асинхронно, поэтому фокус может снова переместиться до завершения восходящего движения. |
Применяется к
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по