[C#] WPF로 Mac 스타일 Topbar 만들기
반응형
오랜만에 포스팅이다.
오랜만에 C#으로 S/W만드는 프로젝트에 들어가기도 했고,
그래서 이번에는 C# WPF 관련해서 여러 작업들중 UI작업에 치중해서 쓸만한 포스팅을 하려고 한다.
이번 프로젝트는 완전히 내 의향대로 만들면 됐기에 맥 스타일의 UI를 구성해보려고 했다.

이렇게 신호등에 아이콘도 Hover되게 넣엇다 ㅎㅎ

이제 구현을 들어가자면
크게 3단계로 나눠진다.
- 메인 윈도우의 topbar를 없애기
- 전체 화면에 가장 위에 Tapbar를 대신할 LayoutControl 만들기
- LayoutControl내 기능 구현하기
메인 윈도우의 Topbar 없애기
이건 사실 간단하다. xaml 내에서 Window 태그 안에 아래 옵션을 넣어주면 된다.
WindowStyle="None"
그러면 이제

이런 모양의 Topbar는 사라진다.
Topbar를 대신할 UI만들기
나같은 경우 그리드로 구현했는데, 그리드의 Row를 여러줄로 하고 맨 위에를 30px로 고정하여 구현했다.
나는 그리드안에 LayoutControl로 사용했다.
<dxlc:LayoutControl Grid.ColumnSpan="3" Padding="0" Background="Transparent">
<dxlc:LayoutGroup HorizontalAlignment="Right" VerticalAlignment="Top" Margin="5" Padding="0">
<Button x:Name="btnMax" Style="{StaticResource RoundWindowButtonStyle}" Click="btnMax_Click" Tag="max" Background="#27C93F"/>
<Button x:Name="btnMin" Style="{StaticResource RoundWindowButtonStyle}" Click="btnMin_Click" Tag="min" Background="#FFBD2E"/>
<Button x:Name="btnClose" Style="{StaticResource RoundWindowButtonStyle}" Click="btnClose_Click" Tag="close" Background="#FF5F56"/>
</dxlc:LayoutGroup>
</dxlc:LayoutControl>
Custom Topbar 기능 구현
이제 드디어 중요한 부분인데,
Topbar의 기능은 크게 2가지이다. 1, 화면 이동, 2, 최소 최대화
코드비하인드
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ButtonState == MouseButtonState.Pressed)
{
this.DragMove();
}
}
전체 그리드에 해당 이벤트를 걸었는데, 조금더 디테일하게 걸고자 하면 높이를 계산해서 걸면 된다.
반응형
'Study > C#' 카테고리의 다른 글
<SQLite.Interop.dll'을(를) 로드할 수 없는경우>를 해결하며 알아보는 .NET과 네이티브 코드(dll)의 통신 절차 (0) | 2024.10.10 |
---|---|
[C#] VisualStudio 2022 ClickOnce를 사용한 소프트웨어 배포방법 (0) | 2024.07.29 |
[C#] C#으로 하는 데이터 크롤링 (0) | 2024.07.22 |
[C#] 하나의 Window에서 두개의 클래스를 Binding하고 싶을때 (0) | 2024.05.22 |
[C#] ScrollViewer 안에 StackPanel을 사용해서 스크롤되는 가변 UI리스트 만들기. (0) | 2024.05.03 |
댓글