Share via


FocusManager.TryFocusAsync(DependencyObject, FocusState) 方法

定义

初始化应用程序时,异步尝试在元素上设置焦点。

public:
 static IAsyncOperation<FocusMovementResult ^> ^ TryFocusAsync(DependencyObject ^ element, FocusState value);
/// [Windows.Foundation.Metadata.RemoteAsync]
 static IAsyncOperation<FocusMovementResult> TryFocusAsync(DependencyObject const& element, FocusState const& value);
[Windows.Foundation.Metadata.RemoteAsync]
public static IAsyncOperation<FocusMovementResult> TryFocusAsync(DependencyObject element, FocusState value);
function tryFocusAsync(element, value)
Public Shared Function TryFocusAsync (element As DependencyObject, value As FocusState) As IAsyncOperation(Of FocusMovementResult)

参数

element
DependencyObject

要对其设置焦点的 对象。

value
FocusState

FocusState 枚举中的值之一,该值指定元素如何获取焦点。

返回

指示是否已成功设置焦点的 FocusMovementResult

属性

Windows 要求

设备系列
Windows 10, version 1803 (在 10.0.17134.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v6.0 中引入)

示例

此处,我们演示如何在 WebView 对象上设置焦点,如果失败,请将焦点还原到原始元素。

async void MoveFocus(WebView webView)) 
{ 
    FocusMovementResult result; 
    result = await FocusManager.TryFocusAsync(webView, FocusState.Programmatic); 
    if (!result.Succeeded) 
    { 
        // Restore focus to original element. 
        this.Focus(FocusState.Programmatic); 
    } 
}

注解

某些对象(如 WebView)可以在应用进程或单独的进程中运行, (请参阅 WebViewExecutionMode.SeparateProcess) 。

当对象在应用进程中运行时,以前聚焦的对象和新焦点对象都按预期发生以下焦点事件:

但是,如果新聚焦的对象在单独的进程中运行,则其中一些事件行为可能会有所不同。

  • 在 TryFocusAsync 操作完成之前,GetFocusedElement 不会返回新聚焦的对象。
  • 失去焦点的控件会同步接收其 LosingFocus 事件,但在异步操作完成之前不会接收 LostFocus
  • 获取焦点的控件会同步接收其 GettingFocus 事件,但在异步操作完成之前不会接收 GotFocus

在应用进程中运行的元素上调用时,TryFocusAsync 会同步完成。

适用于

另请参阅