본문 바로가기

C#의 속삭임

[C#][Window]Window의 계층구조 만들기.

1. ShutdownMode이용.

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows;

using System.Windows.Input;


namespace ThrowWindowParty

{

    class ThrowWindowParty : Application

    {

        [STAThread]

        public static void Main()

        {

            ThrowWindowParty app = new ThrowWindowParty();

            

            //MainWindow가 종료 될때 모두 같이 종료된다.

            app.ShutdownMode = ShutdownMode.OnMainWindowClose;

            

            app.Run();

        }

        protected override void OnStartup(StartupEventArgs args)

        {

            Window winMain = new Window();

            winMain.Title = "Main Window";

            winMain.MouseDown += WindowOnMouseDown;

            winMain.Show();


            for (int i = 0; i < 2; i++)

            {

                Window win = new Window();

                win.Title = "Extra Window No. " + (i + 1);

                

                //작업 표시줄에 표시하지 않는다.

                win.ShowInTaskbar = false;


                win.Show();

            }

        }


        void WindowOnMouseDown(object sender, MouseButtonEventArgs args)

        {

            Window win = new Window();

            win.Title = "Modal Dialog Box";

            win.ShowDialog();

        }

    }

}



2. Owner 프로퍼티를 이용.

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows;

using System.Windows.Input;


namespace ThrowWindowParty

{

    class ThrowWindowParty : Application

    {

        [STAThread]

        public static void Main()

        {

            ThrowWindowParty app = new ThrowWindowParty();

            app.Run();

        }

        protected override void OnStartup(StartupEventArgs args)

        {

            Window winMain = new Window();

            winMain.Title = "Main Window";

            winMain.MouseDown += WindowOnMouseDown;

            winMain.Show();


            for (int i = 0; i < 2; i++)

            {

                Window win = new Window();

                win.Title = "Extra Window No. " + (i + 1);

                

                //win객체는 모달리스가 된다.

                win.Owner = winMain;

                win.Show();

            }

        }


        void WindowOnMouseDown(object sender, MouseButtonEventArgs args)

        {

            Window win = new Window();

            win.Title = "Modal Dialog Box";

            win.ShowDialog();

        }

    }

}



* 모달리스가 있고 모달이 있다.

* 모달 : MainWindow에 소속되며, 종료가 되야지만 자원이 반환된다. 또한 해당 창이 뛰어져있을때는 다른 창은 동작하지 않는다. ex)  win.ShowDialog();

* 모달리스 : 말그대로 모달같지만 모달 같지 않은 녀석인데, 메인이 앞으로 나오지는 않지만 잘 동작한다. 하지만 서브윈도우에 가려 앞으로 나오진 않는다.