wpf 공부를 하면서 아래와 같은 StaticResource 라고 적힌것을 보신적이 있으실텐데요.
![[c# wpf] StaticResource란? (DynamicResource 비교) [c# wpf] StaticResource란? (DynamicResource 비교)](https://blog.kakaocdn.net/dn/dyU88H/btrDqVUXD2b/9IJ3r02Ot0WMucSbXBUtxK/img.png)
이 친구의 정체가 무엇인지 알아보도록 하겠습니다.
1. StaticResource 란?
1) background color 변경(기본)
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 1) background color 변경(기본) [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 1) background color 변경(기본)](https://blog.kakaocdn.net/dn/ctqYqz/btrDpQfk4lb/GQ8EggganM8LpaQTvZROK1/img.png)
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 1) background color 변경(기본) [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 1) background color 변경(기본)](https://blog.kakaocdn.net/dn/bnKyIh/btrDrO9a1gk/CKgc3UWPMtwlKfYfkgOGr1/img.png)
위와 같은 버튼이 있습니다.
우리는 이 버튼의 컬러를 Red로 바꾸고 싶은데요.
어떻게 할까요?
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 1) background color 변경(기본) [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 1) background color 변경(기본)](https://blog.kakaocdn.net/dn/dHALEN/btrDqV1KL72/LpzQ050u0MLmUHAJ7kXpjK/img.png)
Background 속성에 Red컬러를 넣어주면됩니다.
우리가 아는 아주 기본적인 방법인데요. 이외에도 다른 방법이 있다는걸 아시나요?
2) background color 변경(with StaticResource)
(1) 먼저 기존에 작성했던 Background 컬러 부분을 지워줍니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 2) background color 변경(with StaticResource) [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 2) background color 변경(with StaticResource)](https://blog.kakaocdn.net/dn/bfRE5W/btrDobRRQJm/Tv6knQfXdrUIVDovgcZlIk/img.png)
(2) <Window.Resources> 태그를 만듭니다.
그리고 그 안에 SolidColorBrush 엘리먼트와 속성인 Color를 넣어줍니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 2) background color 변경(with StaticResource) [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 2) background color 변경(with StaticResource)](https://blog.kakaocdn.net/dn/bc2BQA/btrDuvuvtKO/RizcfcaylDCnB9GCKv7ieK/img.png)
(3) 이제 <Window.Resources>에서 정의한 컬러와 Button을 연결 시켜줘야 하는데요.
이때 사용하는것이 x:Key값입니다.
기존에 태그와 코드비하인드단(c# 코드)을 연결할때 x:Name을 사용했던것과 다른점이 주목할만한 점입니다.
x:Key 이름을 아래와 같이 SolidColorBrush 태그 안에 정의 해줍니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 2) background color 변경(with StaticResource) [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 2) background color 변경(with StaticResource)](https://blog.kakaocdn.net/dn/KEWsK/btrDoU3mA2g/Gbdz0kKv4paRO9xbkaxAW0/img.png)
버튼에는 해당 x:Key를 참조하는 방법으로 StaticResource 를 이용합니다.
이번 포스팅에 주제이기도한 StaticResource 키워드가 드디어 등장했네요.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 2) background color 변경(with StaticResource) [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 2) background color 변경(with StaticResource)](https://blog.kakaocdn.net/dn/IE5Uh/btrDqUPlsIH/FxLX2lwP0nwnz8XyvY93U0/img.png)
기본적인 형태는 {} 중괄호 형태를 기본으로 StaticResource를 적어주고 우리가 지정한 x:Key명인 RedColor를 적어주면 색 적용이 됩니다.
여기까지 읽으신분은 그냥 기본 형태를 쓰면 될텐데 굳이 StaticResource 방법을 쓸 필요가 있나라는 생각이 드실겁니다.
하지만 .Resources안에 해당 값을 키값으로 정의해두면, 마치 변수처럼 사용이 가능합니다.
즉 코드가 많아질때 그 빛을 발하게 되겠죠?
3) 꼭 Window.Resources형태로 적어야 하나?
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 3) 꼭 Window.Resources형태로 적어야 하나? [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 3) 꼭 Window.Resources형태로 적어야 하나?](https://blog.kakaocdn.net/dn/AYdOY/btrDAP7rrsF/eQrb4MCpshhk5ZvjorK97k/img.png)
해당부분에 Window라고 적힌것은 .Resources에서 정의한 키값이 Window태그 안에서만 동작한다는 말입니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 3) 꼭 Window.Resources형태로 적어야 하나? [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 3) 꼭 Window.Resources형태로 적어야 하나?](https://blog.kakaocdn.net/dn/5bwJ7/btrDCUApzDR/0qQRUGJGgPnzO47Xlep6JK/img.png)
달리말하면 해당 윈도우파일을 넘어갈 경우에 해당 정의가 적용이 안된다는 말이죠.
그럼 더 나아가 전체 프로젝트 파일에 global하게 적용하려면 어떻게 할까요?
가장 큰 범위인 //App.xaml에 있는 Resources안에 정의 해주면 됩니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 3) 꼭 Window.Resources형태로 적어야 하나? [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 3) 꼭 Window.Resources형태로 적어야 하나?](https://blog.kakaocdn.net/dn/clm0v9/btrDBMby6el/dgHNvehFG45PlVuou89Ka1/img.png)
뿐만 아니라 범위를 좁혀 특정 태그안에서만 동작하도록 할 수도 있습니다.
아래예시에는 Grid 태그 안에서만 작동하도록 적어보았습니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 3) 꼭 Window.Resources형태로 적어야 하나? [c# wpf] StaticResource란? (DynamicResource 비교) - 1. StaticResource 란? - 3) 꼭 Window.Resources형태로 적어야 하나?](https://blog.kakaocdn.net/dn/bbR46d/btrDyE6V3o9/Cn0mgcgm7KzGsVLkaHGSUK/img.png)
2. DynamicResource 란?
지금까지는 StaticResource에 대한 것이었다면 지금부터는 DynamicResource에 대해 알아보겠습니다.
이름에서도 느낄 수 있듯 StaticResource는 컴파일 전 미리 다 세팅을 해놓고 고정 출력을 한다면 Dynamicresource는 앱을 실행 후에 다이나믹하게 변경이 가능하다 정도의 느낌을 가지시면 충분합니다!
1) 사용방법
//MainWindow.xaml
(1) 기존에 작성한 Background를 지웁니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법 [c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법](https://blog.kakaocdn.net/dn/cEYv24/btrDAjtIZcW/JDU5afLOisGssmEuRp0Nc1/img.png)
(2) 버튼 클릭 이벤트를 만들어줍니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법 [c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법](https://blog.kakaocdn.net/dn/T6UhQ/btrDttSelhz/1GdLE83IMRXNOIvKOPwcp0/img.png)
//MainWindow.xaml.cs
![[c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법 [c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법](https://blog.kakaocdn.net/dn/cgzygD/btrDyxTL1ot/6kpQoabGBKP9f95dLhojPK/img.png)
여기서 this는 Window를 의미합니다.
즉, 앞서 배운 StaticResources 관점으로 보자면 <Window.Resources> 태그가 this.Resources로 해석할 수 있습니다.
그리고 this.Resources["컬러바꾸기"] 에서 "컬러바꾸기"는 StaticResources 관점으로 보자면 x:Key값을 의미합니다.
xaml에서 컬러를 정의했던부분은 c#코드에서 new SolidColorBrush(Colors.Red) 형태로 적습니다.
그리고 그 값을 this.Resources["컬러바꾸기"]에 할당합니다.
다시 //MainWindow.xaml로 돌아와서 Background 속성부분에 앞서 정의했던 key값을 참조하는 형태로 코드를 적어줍니다.
![[c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법 [c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법](https://blog.kakaocdn.net/dn/sz7kN/btrDAQ6momC/HrBrWYldETuR3KmHKNFmD0/img.png)
이제 완성된 코드를 한번 실행볼까요?
![[c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법 [c# wpf] StaticResource란? (DynamicResource 비교) - 2. DynamicResource 란? - 1) 사용방법](https://blog.kakaocdn.net/dn/2kJb0/btrDxpJboD6/sKWuCmjKUkOlFtaFVRoA5K/img.webp)
처음에는 컬러가 변경되지 않지만 마우스 클릭을 하면 컬러가 바뀌는 Dynamic한 ui가 완성된걸 확인할 수 있습니다.
'c# > wpf' 카테고리의 다른 글
[c# wpf] Style 태그 사용 방법 (2) | 2022.05.31 |
---|---|
[c# wpf] 데이터바인딩에서 mode 사용법 (0) | 2022.05.30 |
[c# wpf] 데이터 바인딩 기초 개념/ 예제 완벽 정리 (3) | 2022.05.27 |
[c# wpf] 새로운 창(윈도우) 여는 법 (0) | 2022.05.24 |
[c# wpf] 탭(Tab Control) 사용법 (0) | 2022.05.24 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.