Поделиться через


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
Наследование
Object Platform::Object IInspectable 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

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

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

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