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);
}
}
설명
가능하면 FocusManager 이벤트 대신 UIElement 포커스 라우트된 이벤트를 사용하는 것이 좋습니다.
FocusManager는 애플리케이션의 특정 요소가 UIElement버블링된 이벤트를 수신하지 않는 고급 시나리오를 위한 것입니다. 예를 들어 팝업, 도구 설명또는 MenuFlyout과 같은 시각적 "오버레이" 개체는 앱 UI의 일부로 표시되지만 실제로는 시각적 트리 계층 구조의 일부가 아닌 자체 포커스 범위인.
다음은 예제를 설명하는 몇 가지 기본 태그입니다.
<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
Button5
포함하는 StackPanel3
포함합니다.
IsOpentrue
설정되고 포커스가 Button1
Button5
이동하면 LosingFocus
및 LostFocus
이벤트가 시각적 트리(StackPanel1
, Grid
및 Page
모두 가져오기)를 통해 버블업됩니다. 그러나 StackPanel3
Button5
버블업되는 후속 GettingFocus
및 GotFocus
이벤트를 수신합니다(Grid
및 Page
Popup
부모-자식 관계에 있지 않으므로 그렇지 않습니다).
애플리케이션에는 논리적 포커스가 있는 여러 요소가 있을 수 있습니다(포커스 범위 수에 따라 다름). 그러나 애플리케이션의 한 요소만 키보드 포커스를 가질 수 있습니다.
논리적 포커스가 있는 요소가 여러 개 있을 수 있지만 포커스 범위당 논리적 포커스가 있는 요소는 하나뿐입니다. 논리적 포커스가 있는 요소에는 반드시 키보드 포커스가 있는 것은 아니지만 키보드 포커스가 있는 요소에는 논리적 포커스가 있습니다.
메서드
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 |
컨테이너 요소 내의 요소(포커스 범위)가 포커스를 잃을 때 발생합니다. 이 이벤트는 비동기적으로 발생하므로 버블링이 완료되기 전에 포커스가 다시 이동할 수 있습니다. |
적용 대상
추가 정보
- 키보드 조작
- 키보드, 게임 패드, 원격 제어 및 접근성 도구 대한
포커스 탐색 - 프로그래밍 방식 포커스 탐색