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 引進)

範例

使用 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)

方法

FindFirstFocusableElement(DependencyObject)

擷取可以根據指定範圍接收焦點的第一個專案。

FindLastFocusableElement(DependencyObject)

擷取可以根據指定範圍接收焦點的最後一個專案。

FindNextElement(FocusNavigationDirection)

擷取應該根據指定的導覽方向接收焦點的專案。

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

擷取應該根據指定的導覽方向接收焦點的專案, (無法搭配索引標籤流覽使用,請參閱備註) 。

FindNextFocusableElement(FocusNavigationDirection)

擷取應該根據指定的導覽方向接收焦點的專案。

FindNextFocusableElement(FocusNavigationDirection, Rect)

擷取應該根據指定的導覽方向和提示矩形接收焦點的專案。

GetFocusedElement()

擷取 UI 中具有焦點的專案。

GetFocusedElement(XamlRoot)

擷取 Xaml island 容器內的焦點專案。

TryFocusAsync(DependencyObject, FocusState)

在初始化應用程式時,以非同步方式嘗試將焦點設定在專案上。

TryMoveFocus(FocusNavigationDirection)

嘗試將焦點從具有焦點的專案變更為指定方向的下一個可焦點專案。

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

嘗試使用指定的導覽選項,將焦點從具有焦點的專案變更為指定方向的下一個可焦點專案。

TryMoveFocusAsync(FocusNavigationDirection)

以非同步方式嘗試將焦點從具有焦點的目前專案變更為指定方向的下一個可焦點專案。

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

以非同步方式嘗試將焦點從具有焦點的目前專案變更為指定方向的下一個可焦點專案,並受限於指定的導覽選項。

事件

GettingFocus

發生在專案實際接收焦點之前。 此事件會同步引發,以確保事件反升時不會移動焦點。

GotFocus

發生于容器元素內的專案 (焦點範圍) 收到焦點時。 此事件會以非同步方式引發,因此焦點可能會在反升完成之前移動。

LosingFocus

發生于焦點從具有焦點的目前專案移至目標元素之前。 此事件會同步引發,以確保事件反升時不會移動焦點。

LostFocus

發生于容器元素內的元素 (焦點範圍) 失去焦點時。 此事件會以非同步方式引發,因此焦點可能會在反升完成之前再次移動。

適用於

另請參閱