FocusManager Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вспомогательный класс, обеспечивающий глобальное управление действиями и событиями фокуса во всех элементах приложения.
public ref class FocusManager sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 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
- Наследование
- Атрибуты
Требования к Windows
Семейство устройств |
Windows 10 (появилось в 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (появилось в v1.0)
|
Примеры
Используйте 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>
В этом случае всплывающее окно содержит StackPanel3, который, в свою очередь, содержит Button5. Если для параметра IsOpen задано значение true, а фокус перемещается с Button1 на Button5, события LostFocus и LostFocus перемещаются по визуальному дереву (StackPanel1, Grid и Page получают оба этих события). Однако только StackPanel3 получает последующие события GettingFocus и GotFocus, которые возникают из Button5 (сетка и страница не используются, так как они не находятся в отношениях "родители-потомки" с popup).
Приложение может иметь несколько элементов с логическим фокусом (в зависимости от количества областей фокуса). Однако только один элемент в приложении может иметь фокус клавиатуры.
Может быть несколько элементов с логическим фокусом, но только один элемент с логическим фокусом для каждого фокуса область. Элемент с логическим фокусом не обязательно имеет фокус клавиатуры, но элемент с фокусом клавиатуры имеет логический фокус.
Журнал версий
Версия Windows | Версия пакета SDK | Добавленная стоимость |
---|---|---|
1703 | 15063 | FindFirstFocusableElement |
1703 | 15063 | FindLastFocusableElement |
1703 | 15063 | FindNextElement(FocusNavigationDirection) |
1703 | 15063 | FindNextElement(FocusNavigationDirection,FindNextElementOptions) |
1703 | 15063 | TryMoveFocus(FocusNavigationDirection,FindNextElementOptions) |
1803 | 17134 | TryFocusAsync |
1803 | 17134 | TryMoveFocusAsync(FocusNavigationDirection) |
1803 | 17134 | TryMoveFocusAsync(FocusNavigationDirection,FindNextElementOptions) |
1809 | 17763 | GettingFocus |
1809 | 17763 | GotFocus |
1809 | 17763 | LosingFocus |
1809 | 17763 | LostFocus |
1903 | 18362 | GetFocusedElement(XamlRoot) |
Методы
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 |
Происходит, когда элемент в элементе контейнера (фокус область) теряет фокус. Это событие возникает асинхронно, поэтому фокус может снова переместиться до завершения восходящего движения. |