다음을 통해 공유


FocusManager 클래스

정의

애플리케이션의 모든 요소에서 포커스 작업 및 이벤트를 전역으로 관리할 수 있도록 하는 도우미 클래스입니다.

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
상속
Object Platform::Object IInspectable 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);
   }
}

설명

가능하면 FocusManager 이벤트 대신 UIElement 포커스 라우트된 이벤트를 사용하는 것이 좋습니다.

FocusManager는 애플리케이션의 특정 요소가 UIElement버블링된 이벤트를 수신하지 않는 고급 시나리오를 위한 것입니다. 예를 들어 팝업, 도구 설명또는 MenuFlyout과 같은 시각적 "오버레이" 개체는 앱 UI의 일부로 표시되지만 실제로는 시각적 트리 계층 구조의 일부가 아닌 자체 포커스 범위인. 팝업경우 IsOpen 프로그래밍 방식으로 설정하고 팝업에서 포커스가 이동할 때 발생합니다.

다음은 예제를 설명하는 몇 가지 기본 태그입니다.

<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>

이 경우 PopupButton5포함하는 StackPanel3포함합니다. IsOpentrue 설정되고 포커스가 Button1Button5이동하면 LosingFocusLostFocus 이벤트가 시각적 트리(StackPanel1, GridPage 모두 가져오기)를 통해 버블업됩니다. 그러나 StackPanel3Button5 버블업되는 후속 GettingFocusGotFocus 이벤트를 수신합니다(GridPagePopup부모-자식 관계에 있지 않으므로 그렇지 않습니다).

애플리케이션에는 논리적 포커스가 있는 여러 요소가 있을 수 있습니다(포커스 범위 수에 따라 다름). 그러나 애플리케이션의 한 요소만 키보드 포커스를 가질 수 있습니다.

논리적 포커스가 있는 요소가 여러 개 있을 수 있지만 포커스 범위당 논리적 포커스가 있는 요소는 하나뿐입니다. 논리적 포커스가 있는 요소에는 반드시 키보드 포커스가 있는 것은 아니지만 키보드 포커스가 있는 요소에는 논리적 포커스가 있습니다.

메서드

FindFirstFocusableElement(DependencyObject)

지정된 범위에 따라 포커스를 받을 수 있는 첫 번째 요소를 검색합니다.

FindLastFocusableElement(DependencyObject)

지정된 범위에 따라 포커스를 받을 수 있는 마지막 요소를 검색합니다.

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

지정된 탐색 방향에 따라 포커스를 받아야 하는 요소를 검색합니다(탭 탐색과 함께 사용할 수 없음, 설명 참조).

FindNextElement(FocusNavigationDirection)

지정된 탐색 방향에 따라 포커스를 받아야 하는 요소를 검색합니다.

FindNextFocusableElement(FocusNavigationDirection, Rect)

지정된 탐색 방향 및 힌트 사각형에 따라 포커스를 받아야 하는 요소를 검색합니다.

FindNextFocusableElement(FocusNavigationDirection)

지정된 탐색 방향에 따라 포커스를 받아야 하는 요소를 검색합니다.

GetFocusedElement()

포커스가 있는 UI의 요소를 검색합니다.

GetFocusedElement(XamlRoot)

XAML 아일랜드 컨테이너 내에서 포커스가 있는 요소를 검색합니다.

TryFocusAsync(DependencyObject, FocusState)

애플리케이션이 초기화될 때 요소에 대한 포커스를 비동기적으로 설정하려고 시도합니다.

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

지정된 탐색 옵션을 사용하여 포커스가 있는 요소에서 지정된 방향으로 포커스가 있는 다음 포커스 가능 요소로 포커스를 변경하려고 시도합니다.

TryMoveFocus(FocusNavigationDirection)

포커스가 있는 요소에서 지정된 방향으로 포커스가 있는 다음 포커스 가능 요소로 포커스를 변경하려고 시도합니다.

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

포커스가 있는 현재 요소에서 지정된 방향의 다음 포커스 가능 요소로 포커스를 변경하고 지정된 탐색 옵션의 적용을 받도록 비동기적으로 시도합니다.

TryMoveFocusAsync(FocusNavigationDirection)

포커스가 있는 현재 요소에서 지정된 방향의 다음 포커스 가능 요소로 포커스를 변경하려고 비동기적으로 시도합니다.

이벤트

GettingFocus

요소가 실제로 포커스를 받기 전에 발생합니다. 이 이벤트는 이벤트가 버블링되는 동안 포커스가 이동되지 않도록 동기적으로 발생합니다.

GotFocus

컨테이너 요소 내의 요소(포커스 범위)가 포커스를 받을 때 발생합니다. 이 이벤트는 비동기적으로 발생하므로 버블링이 완료되기 전에 포커스가 이동할 수 있습니다.

LosingFocus

포커스가 있는 현재 요소에서 대상 요소로 포커스가 이동하기 전에 발생합니다. 이 이벤트는 이벤트가 버블링되는 동안 포커스가 이동되지 않도록 동기적으로 발생합니다.

LostFocus

컨테이너 요소 내의 요소(포커스 범위)가 포커스를 잃을 때 발생합니다. 이 이벤트는 비동기적으로 발생하므로 버블링이 완료되기 전에 포커스가 다시 이동할 수 있습니다.

적용 대상

추가 정보

  • 키보드 조작
  • 키보드, 게임 패드, 원격 제어 및 접근성 도구 대한 포커스 탐색
  • 프로그래밍 방식 포커스 탐색