다음을 통해 공유


MenuFlyout 클래스

정의

명령 메뉴를 표시하는 플라이아웃을 나타냅니다.

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="Items")]
class MenuFlyout : FlyoutBase
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="Items")]
public class MenuFlyout : FlyoutBase
Public Class MenuFlyout
Inherits FlyoutBase
<MenuFlyout>
  oneOrMoreItems
</MenuFlyout>
상속
Object IInspectable DependencyObject FlyoutBase MenuFlyout
파생
특성

Windows 요구 사항

디바이스 패밀리
Windows 10 (10.0.10240.0에서 도입되었습니다.)
API contract
Windows.Foundation.UniversalApiContract (v1.0에서 도입되었습니다.)

예제

자세한 정보, 디자인 지침 및 코드 예제는 메뉴 및 상황에 맞는 메뉴를 참조하세요.

WinUI 2 갤러리 앱이 설치된 경우 여기를 클릭하여 앱을 열고 MenuFlyout의 작동을 확인합니다.

다음은 MenuFlyout 클래스 를 만들고 대부분의 컨트롤에서 사용할 수 있는 속성인 ContextFlyout 속성을 사용하여 MenuFlyout 클래스 를 상황에 맞는 메뉴로 표시하는 예제입니다.

<Rectangle Height="100" Width="100">
  <Rectangle.ContextFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" />
    </MenuFlyout>
  </Rectangle.ContextFlyout>
  <Rectangle.Fill>
    <SolidColorBrush x:Name="rectangleFill" Color="Red" />
  </Rectangle.Fill>
</Rectangle>
private void ChangeColorItem_Click(object sender, RoutedEventArgs e)
{
    // Change the color from red to blue or blue to red.
    if (rectangleFill.Color == Windows.UI.Colors.Red)
    {
        rectangleFill.Color = Windows.UI.Colors.Blue;
    }
    else
    {
        rectangleFill.Color = Windows.UI.Colors.Red;
    }
}

다음 예제는 거의 동일하지만 ContextFlyout 속성을 사용하여 MenuFlyout 클래스를 상황에 맞는 메뉴로 표시하는 대신 FlyoutBase.ShowAttachedFlyout 속성을 사용하여 메뉴로 표시합니다.

<Rectangle
  Height="100" Width="100"
  Tapped="Rectangle_Tapped">
  <FlyoutBase.AttachedFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" />
    </MenuFlyout>
  </FlyoutBase.AttachedFlyout>
  <Rectangle.Fill>
    <SolidColorBrush x:Name="rectangleFill" Color="Red" />
  </Rectangle.Fill>
</Rectangle>
private void Rectangle_Tapped(object sender, TappedRoutedEventArgs e)
{
    FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
}

private void ChangeColorItem_Click(object sender, RoutedEventArgs e)
{
    // Change the color from red to blue or blue to red.
    if (rectangleFill.Color == Windows.UI.Colors.Red)
    {
        rectangleFill.Color = Windows.UI.Colors.Blue;
    }
    else
    {
        rectangleFill.Color = Windows.UI.Colors.Red;
    }
}

이 예제에서는 앱의 변경 조건에 따라 런타임에 메뉴 항목을 추가하고 제거하는 방법을 보여줍니다.

<StackPanel Margin="40" Width="220">
    <Rectangle x:Name="Rect1" Height="100" Width="200" 
               Stroke="Black" StrokeThickness="1" Fill="White">
        <Rectangle.ContextFlyout>
            <MenuFlyout x:Name="RectangleColorMenu"/>
        </Rectangle.ContextFlyout>
    </Rectangle>

    <StackPanel>
        <TextBlock TextWrapping="WrapWholeWords"
                   Text="Check colors to include in the menu, then choose a color from the context menu on the rectangle."/>
        <CheckBox Content="Blue" Click="CheckBox_Click" Tag="blue"/>
        <CheckBox Content="Green" Click="CheckBox_Click" Tag="green"/>
        <CheckBox Content="Red" Click="CheckBox_Click" Tag="red"/>
        <CheckBox Content="Yellow" Click="CheckBox_Click" Tag="yellow"/>
    </StackPanel>
</StackPanel>
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
    // Using the Tag property lets you localize the display name
    // without affecting functionality.
    var cb = (CheckBox)sender;
    if (cb.IsChecked == true)
    {
        AddMenuItem(cb.Tag.ToString(), cb.Content.ToString());
    }
    else
    {
        RemoveMenuItem(cb.Content.ToString());
    }
}

private void AddMenuItem(string colorString, string locColorName)
{
    // Set the color.
    Color newColor = Colors.Blue;
    if (colorString == "green")
        newColor = Colors.Green;
    else if (colorString == "red")
        newColor = Colors.Red;
    else if (colorString == "yellow")
        newColor = Colors.Yellow;

    // Create the menu item.
    var newMenuItem = new MenuFlyoutItem();
    newMenuItem.Text = locColorName;
    newMenuItem.Click += (s, e1) =>
    {
        Rect1.Fill = new SolidColorBrush(newColor);
    };

    // Add the item to the menu.
    RectangleColorMenu.Items.Add(newMenuItem);

    // Sort the menu so it's always consistent.
    var orderedItems =  RectangleColorMenu.Items.OrderBy(i => ((MenuFlyoutItem)i).Text).ToList();
    RectangleColorMenu.Items.Clear();
    foreach (var item in orderedItems)
    {
        RectangleColorMenu.Items.Add(item);
    }
}

private void RemoveMenuItem(string locColorName)
{
    // Get any menu items to remove and remove them.
    var items = RectangleColorMenu.Items.Where(i => ((MenuFlyoutItem)i).Text == locColorName);
    foreach (MenuFlyoutItem item in items)
    {
        RectangleColorMenu.Items.Remove(item);
    }
}

설명

자세한 정보, 디자인 지침 및 코드 예제는 메뉴 및 상황에 맞는 메뉴를 참조하세요.

MenuFlyout은 사용자가 현재 수행하는 작업과 관련된 명령 또는 옵션 목록을 일시적으로 표시합니다.

메뉴 플라이아웃 컨트롤

Flyout 컨트롤을 사용하여 단일 항목을 표시하고 MenuFlyout 컨트롤을 사용하여 항목 메뉴를 표시합니다. 자세한 내용은 메뉴 및 상황에 맞는 메뉴를 참조하세요.

MenuFlyout 컨트롤은 Button.Flyout 속성의 값으로 사용할 수 있습니다. 일반적으로 페이지의 UI 정의의 일부로 XAML에서 설정됩니다. 단추 는 전용 Flyout 속성이 있는 유일한 컨트롤입니다. Button.Flyout으로 설정하면 단추가 탭되거나 호출될 때 MenuFlyout이 표시됩니다.

MenuFlyout을 다른 컨트롤과 연결하려면 모든 UIElement에서 사용할 수 있는 ContextFlyout 속성을 사용합니다.

이전 버전에 대한 참고 사항

참고

ContextFlyout 속성은 Windows 10 1주년 업데이트(SDK 버전 14393) 이전에는 사용할 수 없습니다. 이전 버전의 경우 FlyoutBase.AttachedFlyout 연결된 속성을 사용합니다.

FlyoutBase.AttachedFlyout 연결된 속성을 사용하여 MenuFlyout을 다른 컨트롤과 연결할 수 있습니다. FlyoutBase.AttachedFlyout을 사용하여 MenuFlyout을 다른 UI 요소에 할당하는 경우 ShowAt 메서드 또는 정적 ShowAttachedFlyout 메서드를 호출하여 플라이아웃을 표시해야 합니다.

위에 나열된 멤버 외에도 일반적인 MenuFlyout 시나리오에서 자주 사용되는 기본 클래스 FlyoutBase 의 다른 멤버가 있습니다.

컨트롤 스타일 및 템플릿

기본 스타일ControlTemplate 을 수정하여 컨트롤에 고유한 모양을 지정할 수 있습니다. 컨트롤의 스타일 및 템플릿을 수정하는 방법에 대한 자세한 내용은 컨트롤 스타일 지정을 참조하세요. 컨트롤의 모양을 정의하는 기본 스타일, 템플릿 및 리소스가 파일에 포함 generic.xaml 됩니다. 디자인 목적으로 는 generic.xaml SDK 또는 NuGet 패키지 설치와 함께 로컬로 사용할 수 있습니다.

  • WinUI 스타일(권장) : WinUI에서 업데이트된 스타일은 를 참조하세요 \Users\<username>\.nuget\packages\microsoft.ui.xaml\<version>\lib\uap10.0\Microsoft.UI.Xaml\Themes\generic.xaml.
  • 비 WinUI 스타일: 기본 제공 스타일은 을 참조하세요 %ProgramFiles(x86)%\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic\generic.xaml.

설치를 사용자 지정한 경우 위치가 다를 수 있습니다. 다른 버전의 SDK의 스타일 및 리소스에는 다른 값이 있을 수 있습니다.

XAML에는 컨트롤 템플릿을 수정하지 않고 다른 시각적 상태에서 컨트롤의 색을 수정하는 데 사용할 수 있는 리소스도 포함되어 있습니다. 이러한 리소스를 수정하는 것은 BackgroundForeground와 같은 속성을 설정하는 것이 좋습니다. 자세한 내용은 XAML 스타일 문서의 경량 스타일 섹션을 참조하세요. 경량 스타일 리소스는 Windows 10 버전 1607(SDK 14393)부터 사용할 수 있습니다.

버전 기록

Windows 버전 SDK 버전 추가된 값
1809 17763 ShowAt

생성자

MenuFlyout()

MenuFlyout 클래스의 새 instance 초기화합니다.

속성

AllowFocusOnInteraction

사용자가 상호 작용할 때 요소가 자동으로 포커스를 가져오는지 여부를 나타내는 값을 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
AllowFocusWhenDisabled

컨트롤이 비활성화될 때 포커스를 받을 수 있는지 여부를 지정하는 값을 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
AreOpenCloseAnimationsEnabled

플라이아웃을 열거나 닫을 때 애니메이션이 재생되는지 여부를 나타내는 값을 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
Dispatcher

이 개체가 연결된 CoreDispatcher 를 가져옵니다. CoreDispatcher는 코드가 비 UI 스레드에서 시작되더라도 UI 스레드에서 DependencyObject에 액세스할 수 있는 기능을 나타냅니다.

(다음에서 상속됨 DependencyObject)
ElementSoundMode

소리를 재생하는지 여부에 대한 컨트롤의 기본 설정을 지정하는 값을 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
InputDevicePrefersPrimaryCommands

플라이아웃을 여는 데 사용되는 입력 디바이스가 보조 명령을 쉽게 열지 않는지 여부를 나타내는 값을 가져옵니다.

(다음에서 상속됨 FlyoutBase)
IsConstrainedToRootBounds

플라이아웃이 XAML 루트의 범위 내에 표시되는지 여부를 나타내는 값을 가져옵니다.

(다음에서 상속됨 FlyoutBase)
IsOpen

플라이아웃이 열려 있는지 여부를 나타내는 값을 가져옵니다.

(다음에서 상속됨 FlyoutBase)
Items

메뉴의 콘텐츠를 생성하는 데 사용되는 컬렉션을 가져옵니다.

LightDismissOverlayMode

광원 해제 UI 외부 영역이 어둡게 표시되는지 여부를 지정하는 값을 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
MenuFlyoutPresenterStyle

MenuFlyout을 렌더링할 때 사용되는 스타일을 가져오거나 설정합니다.

MenuFlyoutPresenterStyleProperty

MenuFlyoutPresenterStyle 종속성 속성을 식별합니다.

OverlayInputPassThroughElement

플라이아웃 오버레이 아래에 있는 경우에도 포인터 입력 이벤트를 수신해야 하는 요소를 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
Placement

배치 대상과 관련하여 플라이아웃에 사용할 기본 배치를 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
ShouldConstrainToRootBounds

플라이아웃이 XAML 루트의 범위 내에 표시되어야 하는지 여부를 나타내는 값을 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
ShowMode

플라이아웃이 표시되면 동작하는 방식을 나타내는 값을 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)
Target

플라이아웃의 배치 대상으로 사용할 요소를 가져옵니다.

(다음에서 상속됨 FlyoutBase)
XamlRoot

이 플라이아웃을 볼 XamlRoot를 가져오거나 설정합니다.

(다음에서 상속됨 FlyoutBase)

메서드

ClearValue(DependencyProperty)

종속성 속성의 로컬 값을 지웁니다.

(다음에서 상속됨 DependencyObject)
CreatePresenter()

파생 클래스에서 재정의되는 경우 파생된 컨트롤에 적합한 플라이아웃 콘텐츠를 표시하도록 컨트롤을 초기화합니다. 참고: 이 메서드는 기본 클래스 구현이 없으며 파생 클래스에서 재정의되어야 합니다.

(다음에서 상속됨 FlyoutBase)
GetAnimationBaseValue(DependencyProperty)

애니메이션이 활성화되지 않은 경우에 적용되는 종속성 속성에 대해 설정된 기본 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
GetValue(DependencyProperty)

DependencyObject에서 종속성 속성의 현재 유효 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
Hide()

플라이아웃을 닫습니다.

(다음에서 상속됨 FlyoutBase)
OnProcessKeyboardAccelerators(ProcessKeyboardAcceleratorEventArgs)

바로 가기 키(액셀러레이터)가 앱에서 처리되기 직전에 호출됩니다. 애플리케이션 코드 또는 내부 프로세스가 ProcessKeyboardAccelerators를 호출할 때마다 호출됩니다. 기본 가속기 처리에 영향을 주도록 이 메서드를 재정의합니다.

(다음에서 상속됨 FlyoutBase)
ReadLocalValue(DependencyProperty)

로컬 값이 설정된 경우 종속성 속성의 로컬 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

DependencyObject instance 특정 DependencyProperty에 대한 변경 내용을 수신 대기하기 위한 알림 함수를 등록합니다.

(다음에서 상속됨 DependencyObject)
SetValue(DependencyProperty, Object)

DependencyObject에 대한 종속성 속성의 로컬 값을 설정합니다.

(다음에서 상속됨 DependencyObject)
ShowAt(DependencyObject, FlyoutShowOptions)

지정된 옵션을 사용하여 지정된 요소와 관련하여 배치된 플라이아웃을 표시합니다.

(다음에서 상속됨 FlyoutBase)
ShowAt(FrameworkElement)

지정된 요소와 관련하여 배치된 플라이아웃을 표시합니다.

(다음에서 상속됨 FlyoutBase)
ShowAt(UIElement, Point)

지정된 대상 요소와 관련하여 지정된 오프셋에 배치된 플라이아웃을 표시합니다.

TryInvokeKeyboardAccelerator(ProcessKeyboardAcceleratorEventArgs)

바로 가기 키(가속기)를 호출하려고 시도합니다.

(다음에서 상속됨 FlyoutBase)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

RegisterPropertyChangedCallback을 호출하여 이전에 등록된 변경 알림을 취소합니다.

(다음에서 상속됨 DependencyObject)

이벤트

Closed

플라이아웃이 숨겨져 있을 때 발생합니다.

(다음에서 상속됨 FlyoutBase)
Closing

플라이아웃이 숨겨지기 시작할 때 발생합니다.

(다음에서 상속됨 FlyoutBase)
Opened

플라이아웃이 표시되면 발생합니다.

(다음에서 상속됨 FlyoutBase)
Opening

플라이아웃이 표시되기 전에 발생합니다.

(다음에서 상속됨 FlyoutBase)

적용 대상

추가 정보