[C# WPF] Window화면 Custom하기

2018. 9. 5. 08:20·Programming/C# WPF
728x90

이번에 소개해드리는 것은 WPF에서 기본적으로 제공하는 Window창의 테두리를 저희 입맛에 맞게 바꾸는 것을 해보겠습니다. WPF에는 Window, UserControl, Page등으로 화면을 만들 수 있습니다. 그 중 Window에는 화면 빌드시 Window의 기본적인 요소들이 있는데 이러한 기본요소가 실제 프로젝트를 만들때는 오히려 까다로운 존재일 수 있습니다.


그렇다면 이러한 윈도우의 속성을 제거한 후 타이틀바를 새로 만드는 방법이 훨씬 커스텀하기 편할것입니다. 

방법은 간단합니다. Window의 속성에서 WindowStyle="None"으로 설정해주시기만 하면 해결됩니다. 그 후 위쪽에 타이틀바를 만들고 우상단에 최소화 최대화 종료 버튼을 추가하는 것으로 해결할 수 있습니다.


이전 포스팅을 보니 MVVM 디자인 패턴에 대하여 설명하였는데 WPF를 하면서 엄격하게 MVVM 패턴을 고수하다보면 쉽게 갈 수 있는 길도 어려운 경우가 발생하는 것을 느꼇습니다. 그렇기에 화면과 코드비하인드의 관계를 조금은 수용하는 것도 필요한 것이 제 생각입니다.


본격적으로 타이틀바를 만들어보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<Window x:Class="WindowCustom.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WindowCustom"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" 
        WindowStyle="None"
        AllowsTransparency="True"
        >
 
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
 
        <!-- 타이틀바에 해당하는 공간 -->
        <Grid Grid.Row="0">
 
            <Rectangle MouseLeftButtonDown="Rectangle_MouseDown" 
                       Fill="BlueViolet">
                
            </Rectangle>
 
            <DockPanel HorizontalAlignment="Right">
                <Button x:Name="ToMiniButton" 
                        Click="ToMiniButton_Click"
                        Width="30"
                        Height="30"></Button>
                <Button x:Name="ToMaxButton" 
                        Click="ToMaxOrNormalButton_Click"
                        Width="30"
                        Height="30"></Button>
                <Button x:Name="CloseButton" 
                        Click="CloseButton_Click"
                        Width="30"
                        Height="30"></Button>
 
            </DockPanel>
            
        </Grid>
 
        <!-- 화면의 콘텐츠를 넣을 공간 -->
        <Grid Grid.Row="1">
            
        </Grid>
        
    </Grid>
    
</Window>
 
Colored by Color Scripter
cs


위의 코드는 뷰에 해당하는 코드로써 타이틀바를 만들고 우측에 버튼을 두고 일반적인 윈도우 동작기능을 할 수 있도록 만들었습니다. 기본적인 이벤트를 이용해서 쉽게 화면을 제어할 수 있는 커스텀 윈도우입니다. 이 후의 작업은 스타일작업이며 프로젝트의 테마에 따라 개발자가 마음대로 커스텀 하면 됩니다.


아래의 코드는 코드비하인드의 코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System.Windows;
using System.Windows.Input;
 
namespace WindowCustom
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
 
 
        private void Rectangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }
        
private void ToMiniButton_Click(object sender, RoutedEventArgs e)
        {
            this.WindowState = System.Windows.WindowState.Minimized;
        }
     
  private void ToMaxOrNormalButton_Click(object sender, RoutedEventArgs e)
        {
            if (this.WindowState == System.Windows.WindowState.Maximized)
            {
                this.WindowState = System.Windows.WindowState.Normal;
            } else if (this.WindowState == System.Windows.WindowState.Normal)
            {
                this.WindowState = System.Windows.WindowState.Maximized;
            }
        }
        
  private void CloseButton_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}
 
Colored by Color Scripter
cs


이렇게 하면 간단한 커스텀 윈도우를 만들 수 있습니다.

반응형
저작자표시 (새창열림)

'Programming > C# WPF' 카테고리의 다른 글

[C# WPF] Button Style Custom 방법  (0) 2019.06.12
[C# WPF] ICommand를 활용한 버튼 커맨드 방법  (0) 2019.03.04
C# WPF] INotifyPropertyChanged 인터페이스를 이용한 데이터 바인딩 방법  (1) 2018.04.17
C# WPF] MVVM 패턴을 활용한 프로젝트 관리 방법  (3) 2018.03.23
C#] WPF에서 MariaDB 연결 및 데이터 불러오기  (4) 2018.03.02
'Programming/C# WPF' 카테고리의 다른 글
  • [C# WPF] Button Style Custom 방법
  • [C# WPF] ICommand를 활용한 버튼 커맨드 방법
  • C# WPF] INotifyPropertyChanged 인터페이스를 이용한 데이터 바인딩 방법
  • C# WPF] MVVM 패턴을 활용한 프로젝트 관리 방법
이프로그
이프로그
리뷰, 개발, 일상을 기록하는 블로그
    250x250
  • 이프로그
    이프로그의 IT이야기
    이프로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • Programming (111)
        • C# WPF (11)
        • Java Spring (16)
        • JavaScript & TypeScript (5)
        • Git (9)
        • Database (5)
        • Etc (42)
      • 생활상식 (24)
      • 리뷰 (8)
      • 주식 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      클라우드 컴퓨팅
      Apache Kafka
      협업 도구
      이슈 트래킹
      투자전략
      투자
      rest api
      데이터 파이프라인
      마이크로서비스
      WPF
      javascript
      DevOps
      데이터베이스 성능
      docker
      서버 관리
      주식투자
      분산 메시징 시스템
      재테크
      클라우드 네이티브
      java8
      C# WPF
      데이터 바인딩
      dynamicresource
      자바스크립트 트릭
      XAML
      Java
      웹 개발
      ES6
      Kubernetes
      소프트웨어 개발
    • 최근 댓글

    • 최근 글

    • 반응형
    이프로그
    [C# WPF] Window화면 Custom하기
    상단으로

    티스토리툴바