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
- 繼承
- 屬性
範例
使用 TryMoveFocus 使用方向鍵在 UI 元素之間周遊。
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);
}
}
備註
建議您盡可能使用 UIElement 焦點路由事件,而不是 FocusManager 事件。
FocusManager 適用于應用程式中的特定元素不會從 UIElement接收泡泡事件的進階案例。 例如,顯示為應用程式 UI 一部分的 快顯、 工具提示或 MenuFlyout 等視覺「重迭」物件,但實際上是自己的焦點範圍,而不是視覺化樹狀結構階層的一部分。 如果是 快顯,當您以程式設計方式將 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
接收從 Button5
(Grid
Page
反升的後續 GettingFocus
和 GotFocus
事件,因為它們不在與) 的 Popup
父子式關聯性中。
根據焦點範圍數目) 而定,應用程式可以有多個具有邏輯焦點 (的專案。 不過,應用程式中只有一個專案可以有鍵盤焦點。
可以有多個元素具有邏輯焦點,但每個焦點範圍只能有一個具有邏輯焦點的專案。 具有邏輯焦點的專案不一定具有鍵盤焦點,但具有鍵盤焦點的專案則具有邏輯焦點。
方法
事件
GettingFocus |
發生在專案實際收到焦點之前。 此事件會同步引發,以確保事件反升時不會移動焦點。 |
GotFocus |
發生于容器元素內的專案 (焦點範圍) 收到焦點時。 這個事件會以非同步方式引發,因此焦點可能會在反升完成之前移動。 |
LosingFocus |
發生于焦點從具有焦點的目前專案移至目標元素之前。 此事件會同步引發,以確保事件反升時不會移動焦點。 |
LostFocus |
發生于容器元素內的專案 (焦點範圍) 失去焦點時。 此事件會以非同步方式引發,因此焦點可能會在反升完成之前再次移動。 |