MenuFlyout 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
명령 메뉴를 표시하는 플라이아웃을 나타냅니다.
/// [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>
- 상속
- 파생
- 특성
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은 사용자가 현재 수행하는 작업과 관련된 명령 또는 옵션 목록을 일시적으로 표시합니다.
![메뉴 플라이아웃 컨트롤](windows.ui.xaml.controls/images/controls/menuflyout.png?view=winrt-26100)
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 의 다른 멤버가 있습니다.
- FlyoutBase.AttachedFlyout: MenuFlyout을 특정 UI 요소와 연결하는 연결된 속성입니다( 모든 FrameworkElement 파생 클래스일 수 있음).
- ShowAttachedFlyout: FlyoutBase.AttachedFlyout 사용을 통해 플라이아웃이 이미 UI 요소와 연결되어 있는지 여부를 확인할 수 있는 정적 메서드입니다. 이 경우 메서드는 사용자가 지정한 FrameworkElement를 사용하여 ShowAt를 내부적으로 호출합니다.
컨트롤 스타일 및 템플릿
기본 스타일 및 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에는 컨트롤 템플릿을 수정하지 않고 다른 시각적 상태에서 컨트롤의 색을 수정하는 데 사용할 수 있는 리소스도 포함되어 있습니다. 이러한 리소스를 수정하는 것은 Background 및 Foreground와 같은 속성을 설정하는 것이 좋습니다. 자세한 내용은 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) |
메서드
이벤트
Closed |
플라이아웃이 숨겨져 있을 때 발생합니다. (다음에서 상속됨 FlyoutBase) |
Closing |
플라이아웃이 숨겨지기 시작할 때 발생합니다. (다음에서 상속됨 FlyoutBase) |
Opened |
플라이아웃이 표시되면 발생합니다. (다음에서 상속됨 FlyoutBase) |
Opening |
플라이아웃이 표시되기 전에 발생합니다. (다음에서 상속됨 FlyoutBase) |
적용 대상
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기