3장. WPF C# 코드기반 HelloWrold
- C#/WPF
- 2021. 5. 6. 18:52
3장. WPF C# 코드기반 HelloWrold
참조
목적
- WPF에서 C# 코드 기반으로 HelloWorld를 출력해본다.
실습
Visual Stuoio에서 WPF 프로젝트를 생성하면 기본적으로 MainWindow.xaml, MainWindow.xaml.cs, App.xaml, App.xaml.cs 4개의 파일이 자동으로 생성됩니다.
해당 파일들은 Application 객체와 Window 객체를 기본으로 하나 생성을 해주고 사용자에게 UI 화면을 제공해줍니다.
하지만 해당 내용들이 어떻게 구성되고 돌아가는지 이해하기 위해서 4개의 파일을 삭제하고 직접 Application과 Window 영역을 C# 으로 프로그래밍 해보겠습니다.
MyMain.cs 클래스 하나를 생성하고 다음과 같이 코드를 작성합니다.
코드 설명
- 기본적으로 Application은 STAThread(싱글스레드) 입니다.
- Application을 Run 하게 되면 사용자에게는 보이지 않습니다.
- 때문에, OnStartup 메서드를 Override 하여 MainWindow 객체 하나를 생성합니다.
- Sub Window도 생성할 수 있습니다. 그러나 Sub Window 는 TaskBar에 표시하지 않기 위해 ShowInTaskbar 속성을 False 로 해줍니다.
- Show() 와 ShowDialog() 의 차이점은 윈도우의 창을 모달로 제공하냐, 모달리스로 제공하냐의 차이입니다.
- Show() 로 보여주면 ModalLess로 여러창을 동시에 선택할 수 있습니다.
- 그러나, ShowDialog() 로 보여주면 Modal 창으로써 해당 창이 선택되어 있는 상태에서는 다른 윈도우 창을 선택할 수 없습니다.
- 이와 같이 C# 코드로 WPF의 Application 영역과 Window 영역을 작성해 보았습니다.
using System;
using System.Windows;
using System.Windows.Controls;
namespace WPF03_Test
{
class MyMain : Application
{
[STAThread]
public static void Main()
{
MyMain app = new MyMain();
app.ShutdownMode = ShutdownMode.OnMainWindowClose; //메인 윈도우 닫힐 때, 다 닫히는 속성
app.Run();
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
//MainWindow
Window mainWindow = new Window();
mainWindow.Title = "WPF Sample(Main)";
mainWindow.MouseDown += MainWindow_MouseDown; //MouseDown 이벤트 선언
//윈도우 보여주기
mainWindow.Show();
//Sub Window
for(int i = 0; i < 2; i++)
{
Window win = new Window();
win.Title = $"Extra Window No. {i + 1}";
win.ShowInTaskbar = false; // ShowInTaskbar 속성을 false로 주면 SubWindow는 Taskbar에 표시되지 않는다.
win.Owner = mainWindow; // Window의 Owner를 설정할 수 있다.
win.Show();
}
}
/// <summary>
/// MouseDown 이벤트 핸들러
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainWindow_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
CreateModalWindow();
}
private void CreateModalWindow()
{
Window win = new Window();
win.Title = "Modal DialogBox";
win.Width = 400;
win.Height = 200;
//버튼 생성
Button btn = new Button();
btn.Content = "Click Me!";
btn.Click += Btn_Click;
win.Content = btn; //Window에 Button 객체 붙여넣기
//ShowDialog()는 Modal 형태로 윈도우 실행
win.ShowDialog();
}
/// <summary>
/// Button Click Event Handler
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button Click!", sender.ToString());
}
}
}
728x90
'C# > WPF' 카테고리의 다른 글
5장. WPF 트리거란? (0) | 2021.05.06 |
---|---|
4장. WPF 멀티쓰레드 프로그래밍 (0) | 2021.05.06 |
2장. WPF 데이터바인딩 심플예제 (0) | 2021.05.06 |
1장. WPF HelloWorld (0) | 2021.05.06 |
[WPF] WPF Canvas 가운데로 (0,0) 중심 좌표로 만들기 (0) | 2021.04.04 |
이 글을 공유하기