FocusManager クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
アプリケーション内のすべての要素にわたるフォーカス アクションとイベントのグローバル管理を可能にするヘルパー クラス。
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
- 継承
- 属性
例
方向キーを使用して 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
設定され、フォーカスが から Button1
にButton5
移動すると、 LosingFocus
イベントと LostFocus
イベントがビジュアル ツリー全体にバブルアップします (StackPanel1
、、 Grid
は両方のイベントをPage
取得します)。 ただし、 は 以降の イベントと イベントのみをStackPanel3
受け取ります。Grid
Button5
Page
ただし、 との親子関係Popup
には含まれていないため、 は受け取りません。GotFocus
GettingFocus
アプリケーションは、(フォーカス スコープの数に応じて) 論理フォーカスを持つ複数の要素を持つことができます。 ただし、アプリケーション内の 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 |
コンテナー要素 (フォーカス スコープ) 内の要素がフォーカスを失ったときに発生します。 このイベントは非同期的に発生するため、バブルが完了する前にフォーカスが再び移動する可能性があります。 |