2019년 1월 26일 토요일

WPF 메뉴, 메뉴아이템, Menu, MenuItem

WPF 메뉴, 메뉴아이템, Menu, MenuItem
메뉴는 윈도우 응용 프로그램의 대표적인 사용자 인터페이스로 윈도우 창 제목아래 위치하고 보통 윈도우와 같은 폭(Width)을 가진다.
텍스트로 구성된 가로방향 리스트로 탑레벨 메뉴를 클릭하면 드롭다운 메뉴 또는 하위 메뉴라고 불리는 다른 항목들의 리스트가 나타나게 된다.
클래스 계층구조
System.Windows.Controls.ContentControl
              System.Windows.Controls.MenuItem
              System.Windows.Controls.Menu
ContentControl에서 파생된 컨트롤은 Content 프로퍼티를 가지는데 Button, Label, Tooltip, ScrollViewer, Listbox, Window등이 있다.
ItemControl에서 파생된 컨트롤은 객체의 Collection인 Items 프로퍼티를 가지는데 Listbox, ComboBox 등이 해당된다.
HeaderedItemControl은 ITemsControl로부터 상속받은 프로퍼티 이외에 Header 프로퍼티를 가지고 있는데 메뉴 항목들이 여기에 속한다. MenuItem 객체의 Header 프로퍼티는 텍스트 문자열 또는 작은 비트맵과 함께 정의할 수 있다.
각 메뉴항목에는 하위 메뉴의 컬렉션 항목이 포함될 수 있으며 항목은 Items 프로퍼티에 저장된다.
만약 탑 레벨의 처음 메뉴가 “File” 이라면 이것이 MenuItem 객체가 되고 Header 프로퍼티는 “File”, Items 속성 컬렉션에는 New, Open Save 등의 메뉴를 나타내는 MenuItem 객체가 들어갈 수 있다.
ButtonBase 처럼 MenuItem도 Click, Command 이벤트가 있어 마치 버튼처럼 메뉴항목들을 다룰 수 있다. 또한 MenuItem은 체크 표시를 활성화 비활성화 할 수 있는 IsChecked 프로퍼티를 가지며 체크표시를 자동으로 토글 할 수 있는 IsCheckable 속성도 있다.
Checked 이벤트는 IsChecked 프로퍼티가 false에서 true로 바뀔 때 발생하며 UnChecked 이벤트는 IsChecked 프로퍼티가 true에서 false로 바뀔 때 발생한다.
가끔 특정 메뉴항목을 비활성화 시켜야 하는 경우도 발생하는데, 현재 저장할 문서가 없다면 Save 메뉴는 비활성화 되야 할 것이다. 이를 처리하기 위해 하위 메뉴가 나타날 때 비활성화 시키면 되는데 MenuItem은 이를 위해 SubMenuOpened 이벤트를 정의하고 있으면 그안에서 비활성화 시키면 된다.
메뉴를 만들때는 대체로 위에서 아래로 진행하는데 아래 예문을 보자.
Menu menu = new Menu();
MenuItem file = new MenuItem();
//대개 첫번째 메뉴는 File 이다. ALT키를 누르고 F를 누르면 하위메뉴가 열린다.
file.Header = “_File”;
menu.Items.Add(file); //첫번째 탑레벨 메뉴 File을 추가.
MenuItem newMenu = new MenuItem();
newMenu.Header = “_New”;
newMenu.Click += NewClick; //New 메뉴 클릭시 이벤트 핸들러 메소드 지정
file.Items.Add(newMenu); //File메뉴 하위에 New 메뉴 추가
[MainWindow.xaml]
<Window x:Class="WpfApp1.MainWindow"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="_New" />
<MenuItem Header="_Open" />
<MenuItem Header="_Save" />
<Separator />
<MenuItem Header="_Exit" Click="OnExit" />
</MenuItem>
</Menu>
<TextBox AcceptsReturn="True" />
</DockPanel>
</Window>
[MainWindow.xaml.cs]
using System;
using System.Windows;
namespace WpfApp1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void OnExit(object sender, RoutedEventArgs e)
{
//Application.Current.Shutdown();
Environment.Exit(0);
}
}
}

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...