3장. WPF C# 코드기반 HelloWrold

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());
        }
    }
}

1

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

이 글을 공유하기

댓글

Designed by JB FACTORY