잘쓰는 속성
Title : 창 제목에 나올 이름이다.
Height, Width : 창 크기이다. 물리적 픽셀이 아니라 화면에 나오는 크기 기준이다.
Icon : 경로 넣으면 아이콘 바뀜
Topmost : 다른 프로그램으로 포커스 바꿔도 안꺼지고 화면 맨 위에 남아 있음.
Activate() (코드 상에서) : 포커스 상태로 만든다.
Close() (코드 상에서) : 윈도우를 종료한다.
Owner : 자식 윈도우를 만들 때 이걸 this. 로 넣으면 WindowStartupLocation="CenterOwner" 로 쓸 수 있어 좋다.
Activated - Application 의 Activated 후에 실행된다.
DeActivated - 마찬가지.
Closing - 윈도우를 닫기 전에 호출된다.
Closed - 윈도우를 닫고 나서 호출된다.
위처럼 해당되는 부분에 이벤트 핸들러를 넣으면 원하는 시점에 함수를 실행할 수 있다.
Owner : 자식 윈도우를 만들 때 이걸 this. 로 넣으면 WindowStartupLocation="CenterOwner" 로 쓸 수 있어 좋다.
윈도우의 단계
1 2 3 4 5 6 7 8 9 10 11 12 13 | <Window x:Class="Ex3.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Ex3" mc:Ignorable="d" Title="Window Ex" Height="300" Width="400" Activated="Window_Activated" Deactivated="Window_Deactivated" Closing="Window_Closing" Closed="Window_Closed" > | cs |
Activated - Application 의 Activated 후에 실행된다.
DeActivated - 마찬가지.
Closing - 윈도우를 닫기 전에 호출된다.
Closed - 윈도우를 닫고 나서 호출된다.
위처럼 해당되는 부분에 이벤트 핸들러를 넣으면 원하는 시점에 함수를 실행할 수 있다.
Window의 Application 의 종속성
1 2 3 4 5 6 7 8 9 | private void btnNew_Click(object sender, RoutedEventArgs e) { cnt++; Window win = new Window(); win.Title = "새 창" + cnt.ToString(); win.Height = 400; win.Width = 400; win.Show(); } | cs |
위처럼 Window 를 생성하면 Application.Current.Windows 에 모두 모여있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | private void menuWindow_SubmenuOpened(object sender, RoutedEventArgs e) { menuWindow.Items.Clear(); foreach (Window win in Application.Current.Windows) { if (win == this) continue; if (win.Title == "") continue; MenuItem item = new MenuItem(); item.Header = win.Title; item.Tag = win; item.Click += Item_Click; menuWindow.Items.Add(item); if (this.activeWindow != null && this.activeWindow == win) item.IsChecked = true; else item.IsChecked = false; } } private void Item_Click(object sender, RoutedEventArgs e) { Window w = ((Window)((MenuItem)sender).Tag); ((MenuItem)sender).IsChecked = true; w.Activate(); activeWindow = w; } | cs |
위는 생성된 Window 를 Menu 의 Items 으로 집어넣는 예이다.
Application.Current.Windows 를 어떻게 쓰는지를 중점으로 보면 된다.
나머지는
activateWindow 라는 변수에 Activate 인 윈도우를 넣어서 MenuItem 의 check 상태를 조절한다.
Tag 를 이용해 데이터를 전달하는 건 c# 의 주요한 테크닉이다.
댓글 없음:
댓글 쓰기