FocusManager クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
アプリケーション内のすべての要素にわたるフォーカス アクションとイベントのグローバル管理を可能にするヘルパー クラス。
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 で導入)
|
例
方向キーを使用して 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 |
コンテナー要素 (フォーカス スコープ) 内の要素がフォーカスを失ったときに発生します。 このイベントは非同期的に発生するため、バブルが完了する前にフォーカスが再び移動する可能性があります。 |