통합검색
· 마을서비스란?  · 포럼마을  · 일반마을  · 테마마을  · 마을랭킹  · 활동왕
· 덱스퍼트란?  · TECBOX   · PRSBOX   · 이용안내  
· DEXT제품군  · 솔루션베이  · S/W & ESD 컴포넌트
· 프로그램베이
· LiveSeminar  · LiveConference
WPF & Silverlight 포럼마을입니다.
  마을등급 WPF & Silverlight   이 마을은 포럼마을 입니다이 마을은 자유가입제 마을 입니다 마을소개 페이지로 이동 전입신청
마을촌장촌장 서학수 주민 728 since 2008-07-17
우리마을 공지사항
질문&답변
강좌&팁
자유게시판
자료실
앨범
[마을 게시판]
WPF 강좌
랑데브 게시판
칼럼 게시판
개발자 고충상담
Dev Talk
자유토론방
벼룩시장
재나미 우스개
구인/프로젝트 정보
사람인 채용 게시판
  고객지원 게시판
마이 데브피아
 나의 e-Money 내역
 활동왕 My Page
 스크랩한 게시글보기
 쪽지관리
 주소록관리

 WPF 강좌
 Overriding default SystemColors in WPF 2008-07-23 오후 3:33:29
 kdw234  kdw234님께 메시지 보내기kdw234님을 내 주소록에 추가합니다.kdw234님의 개인게시판 가기 번호: 37389  / 읽음:4,723

안녕하세요. 이번 시간에는 WPF에서 사용하는 Default System Color를 Overriding 하여 사용하는 방법에 대해 소개해 드리겠습니다. 먼저 Default System Color란 Windows에서 어떤 상황에 어떤 부분엔 어떤 Brush를 사용한다 라고 미리 정의해놓은 일종의 Color Table이라 할 수 있습니다. 이해를 돕기 위해 System Color가 사용되는 예를 보여드리자면, 아래 그림과 같이 TextBox나 ListBox, ComboBox에서 선택된 아이템은 배경을 파랑 색으로 보이는 것이 HiglighBrush가 파란색으로 설정 되어 있기 때문입니다.

이제 대충 뭔지 감이 오시나요? WPF에서는 SystemColor 를 System.Windows.SystemColors Class에 약 60여 개 정도 미리 정의 해놓고 각 상황에 맞게 사용하고 있습니다. 조금 옛날 이야기를 하자면, 기존 Win32이나 MFC를 사용하여 선택되었을 때의 색을 변경하기 위해서는 DrawItem부분에서 직접 Rectangle을 그려주는 방식을 사용했습니다. ComboBox, ListBox등 제각각 DrawItem에 그리는 코드를 추가해야 하기 때문에 코드 효율 면에서 매우 떨어지게 됩니다. 그렇다면, WPF는 어떨 가요?

WPF에서는 위와 같은 상황에서 System.Windows.SystemColosr의 ResourceKey를 사용하여 Brush를 참조하게 됩니다. 모든 종류의 기본적인 UI객체들이 SystemColor의 ResourceKey를 참조 하기 때문에 ResourceKey의 내용을 수정한다면 굳이 다시 그려줄 필요 없이, 변경된 내용이 적용됩니다.

그렇다면 어떻게 SystemColor ResourceKey를 수정할 수 있을가요? 간단합니다. 사용하고자 하는 객체의 리소스에 참조해야할 이름의 ResourceKey를 새로 생성하여 리소스를 Overriding하면 되는데요, 예를 들어서 아래 그림과 같이 아이템이 선택되었을 때 Highlight색상을 빨강색 으로 변경하고자 한다면 다음과 같이 할 수 있습니다.

<ListBox>

<ListBox.Resources>

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>

</ListBox.Resources>

<TextBlock>아이템1</TextBlock>

<TextBlock>아이템1</TextBlock>

<TextBlock>아이템1</TextBlock>

</ListBox>

간단하죠? 그럼 리스트 박스가 하나가 아니라, 여러 개라면 어떻게 해야 할까요? 매번 저렇게 리소스를 추가해서 사용해야 할까요? 아닙니다. XAML은 Resource에도 Scope가 존재하기 때문에 부모 리소스에 한번만 적용을 하면 자식 객체들에서도 부모의 리소스를 사용이 가능합니다. 따라서 객체가 여러 개 존재한다 하더라도, 부모 객체에 리소스가 등록되어 있다면 부모 객체의 리소스를 사용하게 됩니다.

<StackPanel Orientation="Horizontal">

<StackPanel.Resources>

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>

</StackPanel.Resources>

<ListBox HorizontalAlignment="Center" BorderBrush="Black">

<TextBlock>아이템1</TextBlock>

<TextBlock>아이템1</TextBlock>

<TextBlock>아이템1</TextBlock>

</ListBox>

<ListBox HorizontalAlignment="Center" BorderBrush="Black">

<TextBlock>아이템1</TextBlock>

<TextBlock>아이템1</TextBlock>

<TextBlock>아이템1</TextBlock>

</ListBox>

<ListBox HorizontalAlignment="Center" BorderBrush="Black">

<TextBlock>아이템1</TextBlock>

<TextBlock>아이템1</TextBlock>

<TextBlock>아이템1</TextBlock>

</ListBox>

</StackPanel>

Resource Scope를 잘 활용하면 몇몇 객체는 빨간색이 몇몇 객체는 다른 색을 적용하는 것 또한 가능합니다. 그럼 오늘 포스팅은 여기까지로 하고 SystemColors Class의 멤버를 정리해 놓은 표를 첨부합니다. 참고하시기 바랍니다.

멤버 (Windows.SystemColor)

설명

ActiveBorderBrush

활성 창의 테두리 색인 SolidColorBrush를 가져옵니다.

ActiveBorderBrushKey

활성 창의 테두리를 칠하는 데 사용되는 SolidColorBrush의 ResourceKey를 가져옵니다.

ActiveBorderColor

활성 창 테두리의 색인 Color 구조체를 가져옵니다.

ActiveBorderColorKey

활성 창 테두리의 Color에 대한 ResourceKey를 가져옵니다.

ActiveCaptionBrush

활성 창 제목 표시줄의 배경색인 SolidColorBrush를 가져옵니다.

ActiveCaptionBrushKey

활성 창 제목 표시줄의 배경을 칠하는 데 사용되는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ActiveCaptionColor

활성 창 제목 표시줄의 배경색인 Color 구조체를 가져옵니다.

ActiveCaptionColorKey

활성 창 제목 표시줄의 배경 Color에 대한 ResourceKey를 가져옵니다.

ActiveCaptionTextBrush

활성 창 제목 표시줄의 텍스트 색인 SolidColorBrush를 가져옵니다.

ActiveCaptionTextBrushKey

활성 창 제목 표시줄의 텍스트를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ActiveCaptionTextColor

활성 창 제목 표시줄의 텍스트 색인 Color 구조체를 가져옵니다.

ActiveCaptionTextColorKey

활성 창 제목 표시줄에 있는 텍스트의 Color에 대한 ResourceKey를 가져옵니다.

AppWorkspaceBrush

응용 프로그램 작업 영역의 색인 SolidColorBrush를 가져옵니다.

AppWorkspaceBrushKey

응용 프로그램 작업 영역을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

AppWorkspaceColor

응용 프로그램 작업 영역의 색인 Color 구조체를 가져옵니다.

AppWorkspaceColorKey

응용 프로그램 작업 영역의 Color에 대한 ResourceKey를 가져옵니다.

ControlBrush

3차원 표시 요소의 표면 색인 SolidColorBrush를 가져옵니다.

ControlBrushKey

3차원 표시 요소의 표면을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ControlColor

3차원 표시 요소의 표면 색인 Color 구조체를 가져옵니다.

ControlColorKey

3차원 표시 요소의 표면 Color에 대한 ResourceKey를 가져옵니다.

ControlDarkBrush

3차원 표시 요소의 그림자 색인 SolidColorBrush를 가져옵니다.

ControlDarkBrushKey

3차원 표시 요소의 그림자를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ControlDarkColor

3차원 표시 요소의 그림자 색인 Color 구조체를 가져옵니다.

ControlDarkColorKey

3차원 표시 요소의 그림자 Color에 대한 ResourceKey를 가져옵니다.

ControlDarkDarkBrush

3차원 표시 요소의 짙은 그림자 색인 SolidColorBrush를 가져옵니다.

ControlDarkDarkBrushKey

3차원 표시 요소의 짙은 그림자를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ControlDarkDarkColor

3차원 표시 요소의 짙은 그림자 색인 Color 구조체를 가져옵니다.

ControlDarkDarkColorKey

3차원 표시 요소의 강조 색의 짙은 그림자 Color에 대한 ResourceKey를 가져옵니다.

ControlLightBrush

3차원 표시 요소의 옅은 색인 SolidColorBrush를 가져옵니다.

ControlLightBrushKey

3차원 표시 요소의 옅은 색 영역을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ControlLightColor

3차원 표시 요소의 옅은 색인 Color 구조체를 가져옵니다.

ControlLightColorKey

3차원 표시 요소의 강조 Color에 대한 ResourceKey를 가져옵니다.

ControlLightLightBrush

3차원 표시 요소의 강조 색인 SolidColorBrush를 가져옵니다.

ControlLightLightBrushKey

3차원 표시 요소의 강조 영역을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ControlLightLightColor

3차원 표시 요소의 강조 색인 Color 구조체를 가져옵니다.

ControlLightLightColorKey

3차원 표시 요소의 강조 Color에 대한 ResourceKey를 가져옵니다.

ControlTextBrush

3차원 표시 요소의 텍스트 색인 SolidColorBrush를 가져옵니다.

ControlTextBrushKey

3차원 표시 요소의 텍스트를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ControlTextColor

3차원 표시 요소의 텍스트 색인 Color 구조체를 가져옵니다.

ControlTextColorKey

3차원 표시 요소의 텍스트 Color에 대한 ResourceKey를 가져옵니다.

DesktopBrush

바탕 화면의 색인 SolidColorBrush를 가져옵니다.

DesktopBrushKey

바탕 화면을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

DesktopColor

바탕 화면의 색인 Color 구조체를 가져옵니다.

DesktopColorKey

바탕 화면의 Color에 대한 ResourceKey를 가져옵니다.

GradientActiveCaptionBrush

활성 창 제목 표시줄에 있는 그라데이션의 오른쪽 색인 SolidColorBrush를 가져옵니다.

GradientActiveCaptionBrushKey

활성 창 제목 표시줄에 있는 그라데이션의 오른쪽 색인 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

GradientActiveCaptionColor

활성 창 제목 표시줄에 있는 그라데이션의 오른쪽 색인 Color 구조체를 가져옵니다.

GradientActiveCaptionColorKey

활성 창 제목 표시줄에 있는 그라데이션의 오른쪽 Color에 대한 ResourceKey를 가져옵니다.

GradientInactiveCaptionBrush

비활성 창 제목 표시줄에 있는 그라데이션의 오른쪽 색인 SolidColorBrush를 가져옵니다.

GradientInactiveCaptionBrushKey

비활성 창 제목 표시줄에 있는 그라데이션의 오른쪽 색인 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

GradientInactiveCaptionColor

비활성 창 제목 표시줄에 있는 그라데이션의 오른쪽 색인 Color 구조체를 가져옵니다.

GradientInactiveCaptionColorKey

비활성 창 제목 표시줄에 있는 그라데이션의 오른쪽 Color에 대한 ResourceKey를 가져옵니다.

GrayTextBrush

비활성 텍스트 색인 SolidColorBrush를 가져옵니다.

GrayTextBrushKey

비활성 텍스트를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

GrayTextColor

비활성 텍스트 색인 Color 구조체를 가져옵니다.

GrayTextColorKey

비활성 텍스트의 Color에 대한 ResourceKey를 가져옵니다.

HighlightBrush

선택된 항목의 배경을 칠하는 SolidColorBrush를 가져옵니다.

HighlightBrushKey

선택된 항목의 배경을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

HighlightColor

선택된 항목의 배경색인 Color 구조체를 가져옵니다.

HighlightColorKey

선택된 항목의 배경 Color에 대한 ResourceKey를 가져옵니다.

HighlightTextBrush

선택된 항목의 텍스트 색인 SolidColorBrush를 가져옵니다.

HighlightTextBrushKey

선택된 항목의 텍스트를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

HighlightTextColor

선택한 항목의 텍스트 색인 Color 구조체를 가져옵니다.

HighlightTextColorKey

선택된 항목의 텍스트 Color에 대한 ResourceKey를 가져옵니다.

HotTrackBrush

핫 트랙 항목을 지정하는 데 사용되는 색인 SolidColorBrush를 가져옵니다.

HotTrackBrushKey

핫 트랙 항목을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

HotTrackColor

핫 트랙 항목을 지정하는 데 사용되는 색인 Color 구조체를 가져옵니다.

HotTrackColorKey

핫 트랙 항목을 나타내는 Color에 대한 ResourceKey를 가져옵니다.

InactiveBorderBrush

비활성 창의 테두리 색인 SolidColorBrush를 가져옵니다.

InactiveBorderBrushKey

비활성 창의 테두리를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

InactiveBorderColor

비활성 창 테두리의 색인 Color 구조체를 가져옵니다.

InactiveBorderColorKey

비활성 창 테두리의 Color에 대한 ResourceKey를 가져옵니다.

InactiveCaptionBrush

비활성 창 제목 표시줄의 배경색인 SolidColorBrush를 가져옵니다.

InactiveCaptionBrushKey

비활성 창 제목 표시줄의 배경을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

InactiveCaptionColor

비활성 창 제목 표시줄의 배경색인 Color 구조체를 가져옵니다.

InactiveCaptionColorKey

비활성 창 제목 표시줄의 배경 Color에 대한 ResourceKey를 가져옵니다.

InactiveCaptionTextBrush

비활성 창 제목 표시줄의 텍스트 색인 SolidColorBrush를 가져옵니다.

InactiveCaptionTextBrushKey

비활성 창 제목 표시줄의 텍스트를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

InactiveCaptionTextColor

비활성 창 제목 표시줄의 텍스트 색인 Color 구조체를 가져옵니다.

InactiveCaptionTextColorKey

비활성 창 제목 표시줄의 텍스트 Color에 대한 ResourceKey를 가져옵니다.

InfoBrush

ToolTip 컨트롤의 배경색인 SolidColorBrush를 가져옵니다.

InfoBrushKey

ToolTip 컨트롤의 배경을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

InfoColor

ToolTip 컨트롤의 배경색인 Color 구조체를 가져옵니다.

InfoColorKey

ToolTip 컨트롤의 배경 Color에 대한 ResourceKey를 가져옵니다.

InfoTextBrush

ToolTip 컨트롤의 텍스트 색인 SolidColorBrush를 가져옵니다.

InfoTextBrushKey

ToolTip 컨트롤의 텍스트를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

InfoTextColor

ToolTip 컨트롤의 텍스트 색인 Color 구조체를 가져옵니다.

InfoTextColorKey

ToolTip 컨트롤의 텍스트 Color에 대한 ResourceKey를 가져옵니다.

MenuBarBrush

메뉴 모음의 배경색인 SolidColorBrush를 가져옵니다.

MenuBarBrushKey

메뉴 모음의 배경을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

MenuBarColor

메뉴 모음의 배경색인 Color 구조체를 가져옵니다.

MenuBarColorKey

메뉴 모음의 배경 Color에 대한 ResourceKey를 가져옵니다.

MenuBrush

메뉴의 배경색인 SolidColorBrush를 가져옵니다.

MenuBrushKey

메뉴의 배경을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

MenuColor

메뉴의 배경색인 Color 구조체를 가져옵니다.

MenuColorKey

메뉴의 배경 Color에 대한 ResourceKey를 가져옵니다.

MenuHighlightBrush

메뉴 항목을 강조 표시하는 데 사용되는 색인 SolidColorBrush를 가져옵니다.

MenuHighlightBrushKey

강조 표시된 메뉴 항목을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

MenuHighlightColor

메뉴 항목을 강조 표시하는 데 사용되는 색인 Color 구조체를 가져옵니다.

MenuHighlightColorKey

강조 표시된 메뉴 항목의 배경 Color에 대한 ResourceKey를 가져옵니다.

MenuTextBrush

메뉴의 텍스트 색인 SolidColorBrush를 가져옵니다.

MenuTextBrushKey

메뉴의 텍스트를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

MenuTextColor

메뉴의 텍스트 색인 Color 구조체를 가져옵니다.

MenuTextColorKey

메뉴의 텍스트 Color에 대한 ResourceKey를 가져옵니다.

ScrollBarBrush

스크롤 막대의 배경색인 SolidColorBrush를 가져옵니다.

ScrollBarBrushKey

스크롤 막대의 배경을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

ScrollBarColor

스크롤 막대의 배경색인 Color 구조체를 가져옵니다.

ScrollBarColorKey

스크롤 막대의 배경 Color에 대한 ResourceKey를 가져옵니다.

WindowBrush

창 클라이언트 영역의 배경색인 SolidColorBrush를 가져옵니다.

WindowBrushKey

창 클라이언트 영역의 배경을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

WindowColor

창 클라이언트 영역의 배경색인 Color 구조체를 가져옵니다.

WindowColorKey

창 클라이언트 영역의 배경 Color에 대한 ResourceKey를 가져옵니다.

WindowFrameBrush

창 프레임의 색인 SolidColorBrush를 가져옵니다.

WindowFrameBrushKey

창 프레임을 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

WindowFrameColor

창 프레임의 색인 Color 구조체를 가져옵니다.

WindowFrameColorKey

창 프레임의 Color에 대한 ResourceKey를 가져옵니다.

WindowTextBrush

창 클라이언트 영역의 텍스트 색인 SolidColorBrush를 가져옵니다.

WindowTextBrushKey

창 클라이언트 영역의 텍스트를 칠하는 SolidColorBrush에 대한 ResourceKey를 가져옵니다.

WindowTextColor

창의 클라이언트 영역의 텍스트 색인 Color 구조체를 가져옵니다.

WindowTextColorKey   

창 클라이언트 영역의 텍스트 Color에 대한 ResourceKey를 가져옵니다.양식의 아래


 

김대욱 (kdw234@naver.com) / http://whatisthat.co.kr

크리에이티브 커먼즈 라이선스Creative Commons License
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다. Creative Commons License
코멘트쓰기
  좋음   놀람   궁금   화남   슬픔   최고   침묵   시무룩   부끄럼   난감
* 코멘트는 500자 이내(띄어쓰기 포함)로 적어주세요.
목록 보기   지금 보고 계시는 글을 회원님의 my Mblog >> 스크랩에 넣어두고 다음에 바로 보실 수 있습니다.  
회사소개  |   개인정보취급방침  |  제휴문의  |   광고문의  |   E-Mail 무단수집거부  |   고객지원  |   이용안내  |   세금계산서
사업자등록번호 안내: 220-81-90008 / 통신판매업신고번호 제 2017-서울구로-0055호 / 대표: 홍영준, 서민호
08390, 서울시 구로구 디지털로32길 30, 1211호 / TEL. 02_6719_6200 / FAX. 02-6499-1910
Copyright ⓒ (주) 데브피아. All rights reserved.