교육 팁

교육 팁은 상황별 정보를 제공하는 풍부한 콘텐츠의 반영구적 플라이아웃입니다. 작업 환경을 개선할 수 있는 중요한 새 기능을 사용자에게 알리고 교육하는 데 주로 사용됩니다.

교육 팁은 빠르게 해제되거나 닫기 위해 명시적 작업이 필요할 수 있습니다. 교육 팁은 꼬리를 사용하여 특정 UI 요소를 대상으로 지정할 수 있으며, 꼬리 또는 대상 없이 사용할 수도 있습니다.

올바른 컨트롤인가요?

TeachingTip 컨트롤을 사용하여 새롭거나 중요한 업데이트 및 기능에 사용자의 관심을 집중시키거나, 작업 환경을 향상시킬 수 있는 비필수 옵션을 사용자에게 미리 알리거나, 작업 완료 방법을 사용자에게 알려줍니다.

교육 팁은 일시적이므로 사용자에게 오류 또는 중요한 상태 변경을 알릴 때 권장되는 컨트롤은 아닙니다.

권장 사항

  • 팁은 영구적이지 않으며 애플리케이션 환경에 중요한 정보 또는 옵션을 포함하지 않아야 합니다.
  • 교육 팁을 너무 자주 표시하지 않도록 합니다. 교육 팁의 긴 세션 전체에서 또는 여러 세션 간에 시차를 적용하면 각 팁이 따로 집중될 수 있습니다.
  • 팁을 간결하게 유지하고 주제를 명확히 드러냅니다. 연구에 따르면 사용자는 팁과 상호 작용할지 결정하기 전에 평균적으로 3 ~ 5개 단어만 읽으며 2-3개 단어만 이해한다고 합니다.
  • 교육 팁의 게임 패드 액세스 가능성은 보장되지 않습니다. 게임 패드 입력을 예측하는 애플리케이션의 경우 게임 패드 및 리모컨 조작을 참조하세요. 앱 UI의 가능한 모든 구성을 사용하여 각 교육 팁의 게임 패드 액세스 가능성을 테스트하는 것이 좋습니다.
  • 교육 팁이 xaml 루트를 이스케이프하도록 설정하는 경우 IsLightDismissEnabled 속성도 사용하도록 설정하고 PreferredPlacement 모드를 xaml 루트의 중심에 가장 가깝게 설정하는 것이 좋습니다.

열린 교육 팁 다시 구성

교육 팁이 열려 있으며 즉시 적용될 경우 일부 콘텐츠 및 속성을 다시 구성할 수 있습니다. 다른 콘텐츠 및 속성(예: 아이콘 속성), 작업 및 닫기 단추, 빠른 해제와 명시적 해제 간의 재구성 작업은 모두 해당 속성의 변경 내용을 적용하기 위해 교육 팁을 닫았다가 다시 얼어야 합니다. 교육 팁을 열어 놓은 상태에서 해제 동작을 수동 해제에서 빠른 해제로 변경하면 빠른 해제 동작이 사용되기 전에 교육 팁의 닫기 단추가 제거되므로 팁이 화면에 표시된 상태를 계속 유지할 수 있습니다.

예제

교육 팁에는 다음과 같은 주목할 만한 구성을 포함하여 몇 가지 구성이 있을 수 있습니다.

교육 팁은 꼬리로 특정 UI 요소를 대상으로 지정하여 나타내는 정보의 컨텍스트 명확성을 높일 수 있습니다.

A sample app with a teaching tip targeting the save button. The tip title reads

제공된 정보가 특정 UI 요소에 적용되지 않는 경우 해당 꼬리를 제거하여 대상이 없는 교육 팁을 만들 수 있습니다.

A sample app with a teaching tip in the bottom right corner. The tip title reads

교육 팁은 사용자가 위쪽 모서리에 있는 "X" 단추 또는 아래쪽의 "닫기" 단추를 통해 해제해야 할 수 있습니다. 교육 팁은 해제 단추가 없는 경우에 빠른 해제를 설정할 수 있으며, 사용자가 스크롤하거나 애플리케이션의 다른 요소와 상호 작용할 때 해제됩니다. 이 동작으로 인해 팀을 스크롤 가능 영역에 배치해야 하는 경우 빠른 해제 팁이 가장 적합한 해결 방법입니다.

A sample app with a light-dismiss teaching tip in the bottom right corner. The tip title reads

UWP 및 WinUI 2

Important

이 문서의 정보 및 예제는 Windows 앱 SDKWinUI 3를 사용하는 앱에 최적화되어 있지만 일반적으로 WinUI 2를 사용하는 UWP 앱에 적용할 수 있습니다. 플랫폼별 정보 및 예제는 UWP API 참조를 확인하세요.

이 섹션에는 UWP 또는 WinUI 2 앱에서 컨트롤을 사용하는 데 필요한 정보가 있습니다.

UWP 앱용 TeachingTip에는 Windows UI 라이브러리 2가 필요합니다. 설치 지침을 비롯한 자세한 내용은 Windows UI 라이브러리를 참조하세요. 이 컨트롤용 API는 Microsoft.UI.Xaml.Controls 네임스페이스에 있습니다.

이 문서의 코드를 WinUI 2와 함께 사용하려면 XAML의 별칭(여기서는 muxc를 사용)을 사용하여 프로젝트에 포함된 Windows UI 라이브러리 API를 표현합니다. 자세한 내용은 WinUI 2 시작 을 참조하세요.

xmlns:muxc="using:Microsoft.UI.Xaml.Controls"

<muxc:TeachingTip />

교육 팁 만들기

WinUI 3 갤러리 앱에는 대부분의 WinUI 3 컨트롤, 특징, 기능의 대화형 예제가 포함되어 있습니다. 앱을 Microsoft Store 에서 다운로드하거나 GitHub에서 소스 코드를 가져오세요.

다음은 제목 및 부제가 있는 TeachingTip의 기본 모양을 보여 주는 대상 있는 교육 팁 컨트롤의 XAML입니다. 교육 팁은 요소 트리 또는 코드 숨김 어디에서든지 나타날 수 있습니다. 아래의 예제에서는 ResourceDictionary에 있습니다.

<Button x:Name="SaveButton" Content="Save">
    <Button.Resources>
        <TeachingTip x:Name="AutoSaveTip"
            Target="{x:Bind SaveButton}"
            Title="Save automatically"
            Subtitle="When you save your file to OneDrive, we save your changes as you go - so you never have to.">
        </TeachingTip>
    </Button.Resources>
</Button>
public MainPage()
{
    this.InitializeComponent();

    if(!HaveExplainedAutoSave())
    {
        AutoSaveTip.IsOpen = true;
        SetHaveExplainedAutoSave();
    }
}

다음은 단추 및 교육 팁을 포함하는 페이지가 표시될 때의 결과입니다.

A sample app with a teaching tip targeting the save button. The tip title reads

위의 예에서 TitleSubtitle 속성을 사용하여 교육 팁의 제목과 부제목을 설정합니다. Target 속성은 "SaveButton"으로 설정되어 이 속성과 단추 간의 시각적 연결을 설정합니다. 교육 팁을 표시하기 위해 해당 IsOpen 속성이 true로 설정됩니다.

대상 없는 팁

모든 팁이 요소 화면과 관련된 것은 아닙니다. 이러한 시나리오에서는 대상을 설정하지 않습니다. 대신 교육 팁이 xaml 루트의 가장자리를 기준으로 표시됩니다. 그러나 교육 팁은 TailVisibility 속성을 "Collapsed"로 설정하여 UI 요소를 기준으로 하는 배치를 유지하면서 꼬리를 제거할 수 있습니다. 다음 예제는 대상 없는 교육 팁입니다.

<Button x:Name="SaveButton" Content="Save" />

<TeachingTip x:Name="AutoSaveTip"
    Title="Saving automatically"
    Subtitle="We save your changes as you go - so you never have to.">
</TeachingTip>

이 예제에서 TeachingTip은 ResourceDictionary 또는 코드 숨김이 아닌 요소 트리에 있습니다. 이러한 사실은 동작에는 영향을 주지 않습니다. TeachingTip은 열려 있을 때만 표시되며, 레이아웃 공간을 차지하지 않습니다.

A sample app with a teaching tip in the bottom right corner. The tip title reads

기본 설정 배치

교육 팁은 PreferredPlacement 속성을 사용하여 플라이아웃의 FlyoutPlacementMode 배치 동작을 복제합니다. 기본 배치 모드는 대상 있는 교육 팁을 대상 위에 배치하고, 대상 없는 교육 팁을 xaml 루트의 아래쪽에 배치하려고 합니다. 플라이아웃을 사용할 때와 마찬가지로, 기본 설정 배치 모드에서 교육 팁을 표시할 공간이 없으면 다른 배치 모드가 자동으로 선택됩니다.

게임 패드 입력을 예측하는 애플리케이션의 경우 게임 패드 및 리모컨 조작을 참조하세요. 앱 UI의 가능한 모든 구성을 사용하여 각 교육 팁의 게임 패드 액세스 가능성을 테스트하는 것이 좋습니다.

PreferredPlacement가 "BottomLeft"로 설정된 대상 있는 교육 팁은 교육 팁 본문이 왼쪽으로 이동된 상태로 꼬리가 대상 맨 아래의 중앙에 표시됩니다.

<Button x:Name="SaveButton" Content="Save">
    <Button.Resources>
        <TeachingTip x:Name="AutoSaveTip"
            Target="{x:Bind SaveButton}"
            Title="Saving automatically"
            Subtitle="We save your changes as you go - so you never have to."
            PreferredPlacement="BottomLeft">
        </TeachingTip>
    </Button.Resources>
</Button>

A sample app with a

해당 PreferredPlacement가 "BottomLeft"로 설정된 대상 없는 교육 팁은 xaml 루트의 왼쪽 아래 모서리에 표시됩니다.

<Button x:Name="SaveButton" Content="Save" />

<TeachingTip x:Name="AutoSaveTip"
    Title="Saving automatically"
    Subtitle="We save your changes as you go - so you never have to."
    PreferredPlacement="BottomLeft">
</TeachingTip>

A sample app with a teaching tip in the bottom left corner. The tip title reads

아래 다이어그램에서는 대상 있는 교육 팁에 대해 설정할 수 있는 13개 PreferredPlacement 모드 전체의 결과를 보여 줍니다. Illustration containing 13 teaching tips, each demonstrating a different targeted placement mode. Each teaching tip is labeled with the mode it represents. The first word of a placement mode indicates the side of the target that the teaching tip will appear centered on. The tail of the teaching tip will always be located at the center of that side of the target and will point towards the target. If there is a second word in the placement mode, the body of the teaching tip will not be centered, but will instead be shifted in the specified direction. For example, the placement mode

아래 다이어그램에서는 대상 없는 교육 팁에 대해 설정할 수 있는 13개 PreferredPlacement 모드 전체의 결과를 보여 줍니다. Illustration containing nine teaching tips, each demonstrating a different non-targeted placement mode. Each teaching tip is labeled with the mode it represents. The first word of a placement mode indicates the side of the xaml root that the teaching tip will appear centered on. If there is a second word in the placement mode, the teaching tip will position itself toward that specified corner of the xaml root. For example, the placement mode

배치 여백 추가

PlacementMargin 속성을 사용하여 대상이 지정된 교육 팁이 해당 대상과 별도로 설정되는 방법 및 대상이 지정되지 않은 교육 팁이 xaml 루트의 가장자리와 별도로 설정되는 방법을 제어할 수 있습니다. Margin과 같이, PlacementMargin에는 4가지 값인 left, right, top, bottom이 있으며 해당하는 값만 사용됩니다. 예를 들어, PlacementMargin.Left는 팁이 대상의 왼쪽 또는 xaml 루트의 왼쪽 가장자리에 있을 때 적용됩니다.

다음 예제에서는 PlacementMargin의 Left/Top/Right/Bottom이 모두 80으로 설정된 대상 없는 팁을 보여 줍니다.

<Button x:Name="SaveButton" Content="Save" />

<TeachingTip x:Name="AutoSaveTip"
    Title="Saving automatically"
    Subtitle="We save your changes as you go - so you never have to."
    PreferredPlacement="BottomLeft"
    PlacementMargin="80">
</TeachingTip>

A sample app with a teaching tip positioned toward, but not fully against, the bottom right corner. The tip title reads

콘텐츠 추가

Content 속성을 사용하여 콘텐츠를 교육 팁에 추가할 수 있습니다. 교육 팁의 크기가 허용하는 것보다 표시할 콘텐츠가 더 많으면 사용자가 콘텐츠 영역을 스크롤할 수 있게 스크롤 막대가 자동으로 사용하도록 설정됩니다.

<Button x:Name="SaveButton" Content="Save">
    <Button.Resources>
        <TeachingTip x:Name="AutoSaveTip"
            Target="{x:Bind SaveButton}"
            Title="Saving automatically"
            Subtitle="We save your changes as you go - so you never have to.">
                <StackPanel>
                    <CheckBox x:Name="HideTipsCheckBox" Content="Don't show tips at start up" IsChecked="{x:Bind HidingTips, Mode=TwoWay}" />
                    <TextBlock>You can change your tip preferences in <Hyperlink NavigateUri="app:/item/SettingsPage">Settings</Hyperlink> if you change your mind.</TextBlock>
                </StackPanel>
        </TeachingTip>
    </Button.Resources>
</Button>

A sample app with a teaching tip targeting the save button. The tip title reads

단추 추가

기본적으로 "X" 닫기 단추는 교육 팁의 제목 옆에 표시됩니다. 닫기 단추는 CloseButtonContent 속성을 사용하여 사용자 지정할 수 있습니다. 이 경우 단추는 교육 팁의 아래쪽으로 이동합니다.

참고: 빠른 해제가 활성화된 팁에는 닫기 버튼이 없습니다.

사용자 지정 작업 단추는 ActionButtonContent 속성(및 필요에 따라 ActionButtonCommandActionButtonCommandParameter 속성)을 설정하여 추가할 수 있습니다.

<Button x:Name="SaveButton" Content="Save">
    <Button.Resources>
        <TeachingTip x:Name="AutoSaveTip"
            Target="{x:Bind SaveButton}"
            Title="Saving automatically"
            Subtitle="We save your changes as you go - so you never have to."
            ActionButtonContent="Disable"
            ActionButtonCommand="{x:Bind DisableAutoSaveCommand}"
            CloseButtonContent="Got it!">
                <StackPanel>
                    <CheckBox x:Name="HideTipsCheckBox" Content="Don't show tips at start up" IsChecked="{x:Bind HidingTips, Mode=TwoWay}" />
                    <TextBlock>You can change your tip preferences in <Hyperlink NavigateUri="app:/item/SettingsPage">Settings</Hyperlink> if you change your mind.</TextBlock>
                </StackPanel>
        </TeachingTip>
    </Button.Resources>
</Button>

A sample app with a teaching tip targeting the save button. The tip title reads

Hero 콘텐츠

가장자리 간 콘텐츠는 HeroContent 속성을 설정하여 교육 팁에 추가할 수 있습니다. Hero 콘텐츠의 위치는 HeroContentPlacement 속성을 설정하여 교육 팁의 위쪽 또는 아래쪽으로 설정할 수 있습니다.

<Button x:Name="SaveButton" Content="Save">
    <Button.Resources>
        <TeachingTip x:Name="AutoSaveTip"
            Target="{x:Bind SaveButton}"
            Title="Saving automatically"
            Subtitle="We save your changes as you go - so you never have to.">
            <TeachingTip.HeroContent>
                <Image Source="Assets/cloud.png" />
            </TeachingTip.HeroContent>
        </TeachingTip>
    </Button.Resources>
</Button>

A sample app with a teaching tip targeting the save button. The tip title reads

아이콘 추가

아이콘은 IconSource 속성을 사용하여 제목 및 부제목 옆에 추가할 수 있습니다. 권장되는 아이콘 크기에는 16px, 24px 및 32px이 포함됩니다.

<Button x:Name="SaveButton" Content="Save">
    <Button.Resources>
        <TeachingTip x:Name="AutoSaveTip"
            Target="{x:Bind SaveButton}"
            Title="Saving automatically"
            Subtitle="We save your changes as you go - so you never have to."
            <TeachingTip.IconSource>
                <SymbolIconSource Symbol="Save" />
            </TeachingTip.IconSource>
        </TeachingTip>
    </Button.Resources>
</Button>

A sample app with a teaching tip targeting the save button. The tip title reads

빠른 해제 사용

빠른 해제 기능은 기본적으로 사용하지 않도록 설정되지만, 예를 들어 사용자가 스크롤하거나 애플리케이션의 다른 요소와 상호 작용할 때 교육 팁이 해제되도록 IsLightDismissEnabled 속성을 설정하여 사용하도록 설정할 수 있습니다. 이 동작으로 인해 팀을 스크롤 가능 영역에 배치해야 하는 경우 빠른 해제 팁이 가장 적합한 해결 방법입니다.

빠른 해제 동작을 사용자에게 알리기 위해 빠른 해제 기능이 설정된 교육 팁에서 닫기 단추가 자동으로 제거됩니다.

<Button x:Name="SaveButton" Content="Save" />

<TeachingTip x:Name="AutoSaveTip"
    Title="Saving automatically"
    Subtitle="We save your changes as you go - so you never have to."
    IsLightDismissEnabled="True">
</TeachingTip>

A sample app with a light-dismiss teaching tip in the bottom right corner. The tip title reads

XAML 루트 범위 이스케이프

Windows 10 버전 1903(빌드 18362)부터 교육 팁은 ShouldConstrainToRootBounds 속성을 설정하여 XAML 루트 및 화면의 경계를 이스케이프할 수 있습니다. 이 속성을 사용하도록 설정하면 교육 팁은 XAML 루트 및 화면 범위 안을 유지하려고 하지 않으며, 항상 PreferredPlacement 설정 모드에 있습니다. IsLightDismissEnabled 속성을 사용하고 PreferredPlacement 모드를 XAML 루트의 중심에 가장 가깝게 설정하여 사용자에게 최상의 환경을 제공하는 것이 좋습니다.

이전 Windows 버전에서는 이 속성이 무시되고 교육 팁이 항상 XAML 루트 범위를 벗어나지 않습니다.

<Button x:Name="SaveButton" Content="Save" />

<TeachingTip x:Name="AutoSaveTip"
    Title="Saving automatically"
    Subtitle="We save your changes as you go - so you never have to."
    PreferredPlacement="BottomRight"
    PlacementMargin="-80,-50,0,0"
    ShouldConstrainToRootBounds="False">
</TeachingTip>

A sample app with a teaching tip outside of the app's bottom right corner. The tip title reads

닫기 취소 및 지연

Closing 이벤트를 사용하여 교육 팁의 닫기를 취소 및/또는 연기할 수 있습니다. 이 이벤트를 사용하여 교육 팁을 열어 두거나 작업 또는 사용자 지정 애니메이션이 수행될 수 있는 시간을 허용할 수 있습니다. 그러나 교육 팁 닫기를 취소하면 IsOpen이 true로 복귀되지만, 지연 동안에는 false 상태를 유지합니다. 프로그래밍 방식 닫기도 취소할 수 있습니다.

참고 항목

배치 옵션에 따르면 교육 팁을 완전히 표시하지 못할 경우 교육 팁은 액세스 가능한 닫기 단추가 없는 상태로 표시되지 않고, 이벤트 수명 주기를 반복하여 닫기를 강제로 수행합니다. 앱에서 Closing 이벤트를 취소하는 경우 교육 팁은 액세스 가능한 닫기 단추 없이 열린 상태를 유지할 수 있습니다.

<TeachingTip x:Name="EnableNewSettingsTip"
    Title="New ways to protect your privacy!"
    Subtitle="Please close this tip and review our updated privacy policy and privacy settings."
    Closing="OnTipClosing">
</TeachingTip>
private void OnTipClosing(muxc.TeachingTip sender, muxc.TeachingTipClosingEventArgs args)
{
    if (args.Reason == muxc.TeachingTipCloseReason.CloseButton)
    {
        using(args.GetDeferral())
        {
            bool success = UpdateUserSettings(User thisUsersID);
            if(!success)
            {
                // We were not able to update the settings!
                // Don't close the tip and display the reason why.
                args.Cancel = true;
                ShowLastErrorMessage();
            }
        }
    }
}