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が含まれます。 IsOpentrueに設定され、フォーカスがButton1からButton5に移動すると、LosingFocusイベントとLostFocus イベントがビジュアル ツリー (StackPanel1GridPageの両方のイベント) にバブル アップします。 ただし、後続のGettingFocusGotFocusイベントを受信するのはStackPanel3だけであり、Button5からバブルアップします (GridおよびPageは、Popupとの親子関係に含まれていないため、受け取りません)。

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

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

メソッド

名前 説明
FindFirstFocusableElement(DependencyObject)

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

FindLastFocusableElement(DependencyObject)

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

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

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

FindNextElement(FocusNavigationDirection)

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

FindNextFocusableElement(FocusNavigationDirection, Rect)

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

FindNextFocusableElement(FocusNavigationDirection)

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

GetFocusedElement()

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

GetFocusedElement(XamlRoot)

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

TryFocusAsync(DependencyObject, FocusState)

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

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

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

TryMoveFocus(FocusNavigationDirection)

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

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

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

TryMoveFocusAsync(FocusNavigationDirection)

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

イベント

名前 説明
GettingFocus

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

GotFocus

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

LosingFocus

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

LostFocus

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

適用対象

こちらもご覧ください