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에서 버블링된 이벤트를 수신하지 않는 고급 시나리오를 위한 것입니다. 예를 들어 앱 UI의 일부로 표시되지만 실제로는 시각적 트리 계층 구조의 일부가 아닌 자체 포커스 범위인 Popup, Tooltip 또는 MenuFlyout 과 같은 시각적 개체 "오버레이" 개체입니다. 팝업의 경우 프로그래밍 방식으로 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 contains는 StackPanel3차례로 포함됩니다 Button5.
IsOpen이 설정 true 되고 포커스가 이동 Button1 하면 Button5LosingFocus 시각적 트리(StackPanel1Grid, 해당 이벤트 및 LostFocusPage 두 이벤트 모두 가져오기)에 걸쳐 이벤트가 버블업됩니다. 그러나 후속 이벤트와 버블업 Button5 되는 이벤트만 StackPanel3 받 GettingFocus 습니다Page(Grid부모-자식 관계에 Popup있지 않으므로).GotFocus
애플리케이션에는 논리적 포커스가 있는 여러 요소가 있을 수 있습니다(포커스 범위 수에 따라 다름). 그러나 애플리케이션의 한 요소만 키보드 포커스를 가질 수 있습니다.
논리적 포커스가 있는 요소가 여러 개 있을 수 있지만 포커스 범위당 논리적 포커스가 있는 요소는 하나뿐입니다. 논리적 포커스가 있는 요소에는 반드시 키보드 포커스가 있는 것은 아니지만 키보드 포커스가 있는 요소에는 논리적 포커스가 있습니다.
메서드
| Name | Description |
|---|---|
| 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) |
포커스가 있는 현재 요소에서 지정된 방향의 다음 포커스 가능 요소로 포커스를 변경하려고 비동기적으로 시도합니다. |
이벤트
| Name | Description |
|---|---|
| GettingFocus |
요소가 실제로 포커스를 받기 전에 발생합니다. 이 이벤트는 이벤트가 버블링되는 동안 포커스가 이동되지 않도록 동기적으로 발생합니다. |
| GotFocus |
컨테이너 요소 내의 요소(포커스 범위)가 포커스를 받을 때 발생합니다. 이 이벤트는 비동기적으로 발생하므로 버블링이 완료되기 전에 포커스가 이동할 수 있습니다. |
| LosingFocus |
포커스가 있는 현재 요소에서 대상 요소로 포커스가 이동하기 전에 발생합니다. 이 이벤트는 이벤트가 버블링되는 동안 포커스가 이동되지 않도록 동기적으로 발생합니다. |
| LostFocus |
컨테이너 요소 내의 요소(포커스 범위)가 포커스를 잃을 때 발생합니다. 이 이벤트는 비동기적으로 발생하므로 버블링이 완료되기 전에 포커스가 다시 이동할 수 있습니다. |