Window 시작 위치 및 최상위 Window [언제나 WPF]

 안녕하세요. 언제나 휴일, 언휴예요. 이번 강의는 Window 위치와 최상위 Window를 알아볼게요.

 먼저 창이 뜨는 시작 위치를 알아볼게요.

 Window 컨텐츠로 Grid를 지우고 StackPanel을 넣으세요. 그리고 StackPanel에 Button을 세 개 추가합니다. 버튼 내부 문자열로 “Center Owner”, “Center Screen”, “Center Manual”을 입력하세요.

 느낌 아시죠. 네. 바로 윈도우 시작 위치를 지정하는 속성들입니다.

 각 버튼에 Name 특성을 지정하세요. 저는 btn_owner, btn_screen, btn_manual로 정할게요.

 그리고 Click 이벤트 핸들러를 지정합니다. Click 특성을 지정하면 MSBuild가 알아서 만들어 주는 것은 이전 강의 “XAML과 코드 숨김 관계”에서 다루어서 알고 계실거예요.

 프로젝트에 창을 하나 추가하세요. 저는 ChildWindow라고 정할게요.

 이제 세 개의 버튼 클릭 이벤트 핸들러를 작성합시다.

 Btn_owner_Click 메서드에서는 ChildWindow를 생성한 후 StartupLocation을 CenterOwner로 지정하세요. 그리고 Show 메서드를 호출합니다. 참고로 Show 메서드를 호출하면 모달리스로 동작하고 ShowDialog 메서드를 호출하면 모달로 동작합니다.

 다른 두 개의 이벤트 핸들러에도 각각 CenterScreen과 Manual로 지정하세요.

        private void Btn_owner_Click(object sender, RoutedEventArgs e)
        {
            Window win = new ChildWindow();
            win.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            win.Show();
        }

        private void Btn_scren_Click(object sender, RoutedEventArgs e)
        {
            Window win = new ChildWindow();
            win.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            win.Show();
        }

        private void Btn_manual_Click(object sender, RoutedEventArgs e)
        {
            Window win = new ChildWindow();
            win.WindowStartupLocation = WindowStartupLocation.Manual;
            win.Show();
        }

 이제 실행해서 확인해 봅시다.

 해 보시면 다른 것은 잘 동작하는 것 같은데 CenterOwner는 이상하게 동작하지 않나요?

 ChildWinodw의 Owner를 결정하지 않아서 이런 거예요. Owner를 자신으로 등록하세요.

        private void Btn_owner_Click(object sender, RoutedEventArgs e)
        {
            Window win = new ChildWindow();
            win.Owner = this;
            win.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            win.Show();
        }

 이제 다시 실행해 보세요.

 원하는 결과를 얻으셨죠.

 이번에는 최상위 윈도우를 만들어 볼게요. 흔히 화면의 Z좌표라고 말하죠.

 Xaml 파일로 가서 버튼을 하나 추가합니다. Name 특성 값을 결정하시고 내부 문자열은 “Top Most”로 입력하세요. 클릭 이벤트 핸들러도 설정하세요. 폰트 크기는 덤으로~

 이제 C# 코드 숨김 파일로 가서 클릭 이벤트 핸들러를 작성합시다.

 ChildWindow를 생성 후에 다른 창과 구분하기 위해 배경 브러쉬를 변경하세요. 이제 TopMost 속성을 true로 지정하고 Show 메서드를 호출합니다.

        private void Btn_top_Click(object sender, RoutedEventArgs e)
        {
            Window win = new ChildWindow();
            win.Background = Brushes.Cyan;
            win.Topmost = true;
            win.Show();
        }

 실행해 보세요.

 다른 버튼을 먼저 클릭하고 “Top Most” 버튼도 클릭하세요. 그리고 창을 선택해 보시면 최상위 창으로 설정 상태를 확인할 수 있어요.

 “Top Most” 버튼을 한 번 더 클릭하세요. 그리고 확인해 보면 “Top Most” 창끼리는 선택에 따라 순서가 바뀔 수 있음을 알 수 있어요.

 이상으로 창의 위치 강의를 마칠게요.