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 引進)
|
範例
使用 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 等視覺「重迭」物件,但實際上是自己的焦點範圍,而不是視覺化樹狀結構階層的一部分。 在 Popup的情況下,當您以程式設計方式將 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) 的父子式關聯性。
應用程式可以有多個具有邏輯焦點的專案, (視焦點範圍數目而定) 。 不過,應用程式中只有一個專案可以有鍵盤焦點。
有多個元素具有邏輯焦點,但每個焦點範圍只有一個具有邏輯焦點的專案。 具有邏輯焦點的專案不一定具有鍵盤焦點,但具有鍵盤焦點的專案具有邏輯焦點。
版本歷程記錄
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) |
方法
事件
GettingFocus |
發生在專案實際接收焦點之前。 此事件會同步引發,以確保事件反升時不會移動焦點。 |
GotFocus |
發生于容器元素內的專案 (焦點範圍) 收到焦點時。 此事件會以非同步方式引發,因此焦點可能會在反升完成之前移動。 |
LosingFocus |
發生于焦點從具有焦點的目前專案移至目標元素之前。 此事件會同步引發,以確保事件反升時不會移動焦點。 |
LostFocus |
發生于容器元素內的元素 (焦點範圍) 失去焦點時。 此事件會以非同步方式引發,因此焦點可能會在反升完成之前再次移動。 |