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
属性

方向キーを使用して UI 要素間を移動するには、 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);
   }
}

注釈

可能な限り、FocusManager イベントではなく UIElement フォーカス ルーティング イベントを使用することをお勧めします。

FocusManager は、アプリケーション内の特定の要素が UIElement からバブル イベントを受信しない高度なシナリオを対象としています。 たとえば、 ポップアップヒントMenuFlyout などの視覚的な "オーバーレイ" オブジェクトは、アプリ UI の一部として表示されますが、実際には独自のフォーカス スコープであり、ビジュアル ツリー階層の一部ではありません。 ポップアップの場合は、プログラムによって 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設定され、フォーカスが から Button1Button5移動すると、 LosingFocus イベントと LostFocus イベントがビジュアル ツリー全体にバブルアップします (StackPanel1、、 Gridは両方のイベントをPage取得します)。 ただし、 は 以降の イベントと イベントのみをStackPanel3受け取ります。GridButton5Pageただし、 との親子関係Popupには含まれていないため、 は受け取りません。GotFocusGettingFocus

アプリケーションは、(フォーカス スコープの数に応じて) 論理フォーカスを持つ複数の要素を持つことができます。 ただし、アプリケーション内の 1 つの要素のみがキーボード フォーカスを持つことができます。

論理フォーカスを持つ複数の要素を含めることができますが、フォーカススコープごとに論理フォーカスを持つ要素は 1 つだけです。 論理フォーカスを持つ要素は必ずしもキーボード フォーカスを持つわけではありませんが、キーボード フォーカスを持つ要素には論理フォーカスがあります。

メソッド

FindFirstFocusableElement(DependencyObject)

指定したスコープに基づいてフォーカスを受け取ることができる最初の要素を取得します。

FindLastFocusableElement(DependencyObject)

指定したスコープに基づいてフォーカスを受け取ることができる最後の要素を取得します。

FindNextElement(FocusNavigationDirection)

指定したナビゲーション方向に基づいてフォーカスを受け取る要素を取得します。

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

指定したナビゲーション方向に基づいてフォーカスを受け取る要素を取得します (タブ ナビゲーションでは使用できません。「解説」を参照)。

FindNextFocusableElement(FocusNavigationDirection)

指定したナビゲーション方向に基づいてフォーカスを受け取る要素を取得します。

FindNextFocusableElement(FocusNavigationDirection, Rect)

指定したナビゲーション方向とヒントの四角形に基づいてフォーカスを受け取る要素を取得します。

GetFocusedElement()

フォーカスがある UI 内の要素を取得します。

GetFocusedElement(XamlRoot)

XAML アイランド コンテナー内のフォーカスされた要素を取得します。

TryFocusAsync(DependencyObject, FocusState)

アプリケーションの初期化時に、要素にフォーカスを設定しようと非同期的に試行します。

TryMoveFocus(FocusNavigationDirection)

フォーカスのある要素から、指定した方向の次のフォーカス可能な要素にフォーカスを変更しようとします。

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

指定したナビゲーション オプションを使用して、フォーカスのある要素から、指定した方向の次のフォーカス可能な要素にフォーカスを変更しようとします。

TryMoveFocusAsync(FocusNavigationDirection)

フォーカスを持つ現在の要素から、指定した方向の次のフォーカス可能な要素に非同期的にフォーカスを変更しようとします。

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

フォーカスを持つ現在の要素から、指定した方向の次のフォーカス可能な要素に非同期的に変更を試み、指定したナビゲーション オプションに従います。

イベント

GettingFocus

要素が実際にフォーカスを受け取る前に発生します。 このイベントは、イベントがバブルしている間にフォーカスが移動されないように同期的に発生します。

GotFocus

コンテナー要素 (フォーカス スコープ) 内の要素がフォーカスを受け取ったときに発生します。 このイベントは非同期的に発生するため、バブルが完了する前にフォーカスが移動する可能性があります。

LosingFocus

フォーカスを持つ現在の要素からターゲット要素にフォーカスが移動する前に発生します。 このイベントは、イベントがバブルしている間にフォーカスが移動されないように同期的に発生します。

LostFocus

コンテナー要素 (フォーカス スコープ) 内の要素がフォーカスを失ったときに発生します。 このイベントは非同期的に発生するため、バブルが完了する前にフォーカスが再び移動する可能性があります。

適用対象

こちらもご覧ください