[C# WPF] HelloWorld(XAML기반) -2

728x90

https://www.youtube.com/watch?v=vlVKwC1ALmM&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=2

📌 Window 띄우기

namespace WpfApp2
{
    internal class MyMain : Application
    {
        [STAThread]
        public static void Main()
        {
            MyMain app = new MyMain();
            //프로그램 시작
            app.Run();
        }

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e); 

            //메인윈도우 생성
            Window mainWindow = new Window();


            //윈도우 속성
            mainWindow.Title = "WPF Sample(Main)";

            //이벤트 생성 
            //MouseDown 이벤트 발생 시 호출되는 메서드 WinMouseDown
            mainWindow.MouseDown += WinMouseDown;

            //윈도우 화면 보여주기
            mainWindow.Show();

            //sub Window

            for(int i=0; i<2; i++)
            {
                //윈도우 만들기
                Window Win = new Window();
                Win.Title = "Extra Window No" + (i + 1);
                Win.Show();
            }

            //메인윈도우 1개 서브윈도우 1개가 뜨게된다.


        }
        private void WinMouseDown(object sender, MouseButtonEventArgs e)
        {
            //모달창 생성
            Window win = new Window();
            win.Title = "Modal DialogBox";
            win.Width = 400;
            win.Height = 200;

            Button b = new Button();
            b.Content = "Click me";
            //버튼 클릭 시 Button_Click 메서드 실행 
            b.Click += Button_Click;

            //윈도우에 버튼을 넣기 윈도우 크기만큼 버튼이 들어간다.
            win.Content = b;

            //윈도우에 모달 형태로 띄운다
            win.ShowDialog(); 
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("button Click", sender.ToString());
        }
    }
}
  • main 은 실행되더라도 화면에 보이지 않기 때문에 OnStartup 을 재정의하여 사용
  • 실행하면 아래와 같은 화면이 뜬다.

 

            for(int i=0; i<2; i++)
            {
                //윈도우 만들기
                Window Win = new Window();
                Win.Title = "Extra Window No" + (i + 1);

                //TaskBar에서 숨기기
                Win.ShowInTaskbar = false;

                Win.Show();
            }
  • TaskBar 에서 숨기고 싶을 때에는 ShowInTaskbar를 false로 두면 된다.

📌 셧다운 모드

        [STAThread]
        public static void Main()
        {
            MyMain app = new MyMain();

            //셧다운모드 
            //OnExplicitShutdown : 명시적으로 셧다운 할 때 다른 창도 죽이기 
            //OnLastWindowClose : 마지막 창 닫힐 때 다른 창도 죽이기 
            //OnMainWindowClose : main Window 닫힐 때 다른 창도 죽이기 
            app.ShutdownMode = ShutdownMode.OnMainWindowClose;

            //프로그램 시작
            app.Run();
        }

📌 부모 자식 관계 설정하기 (Owner)

  • sub Window를 Main Window의 자식으로 설정 해 두면 Main Window가 꺼질 때 sub Window도 같이 꺼진다.
            //sub Window

            for(int i=0; i<2; i++)
            {
                //윈도우 만들기
                Window Win = new Window();
                Win.Title = "Extra Window No" + (i + 1);

                //TaskBar에서 숨기기
                Win.ShowInTaskbar = false;

                //Owner 인 MainWindow가 죽으면 sub Window 같이 죽음 
                Win.Owner = MainWindow;
                Win.Show();
            }
  • Owner를 설정하면 main이 항상 제일 뒤 창으로 열린다.
728x90