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 で導入)

方向キーを使用して 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 が含まれます。この StackPanel3 には Button5 が含まれます。 IsOpen が true に設定され、フォーカスが Button1 から Button5 に移動すると、LosingFocus イベントと LostFocus イベントがビジュアル ツリー全体にバブルアップします (StackPanel1、Grid、Page は両方のイベントを取得します)。 ただし、Button5 からバブルアップする後続の GettingFocus イベントと GotFocus イベントを受け取るのは StackPanel3 だけです (Grid と Page は、Popup との親子関係に含まれていないため、受け取りません)。

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

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

バージョン履歴

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()

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

GetFocusedElement(XamlRoot)

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

TryFocusAsync(DependencyObject, FocusState)

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

TryMoveFocus(FocusNavigationDirection)

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

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

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

TryMoveFocusAsync(FocusNavigationDirection)

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

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

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

イベント

GettingFocus

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

GotFocus

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

LosingFocus

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

LostFocus

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

適用対象

こちらもご覧ください