Tag

WPF Resource에 대해서 공부 하던중
ResourceDictionary에 대해서 알게 되었고,

찰스 패졸드의 WPF 책을 보고 한번 공부해 보았습니다.

먼저 ResourceDictionary 클래스는 mdsn에 다음과 같이
정의 되어 있었습니다.


http://msdn.microsoft.com/ko-kr/library/system.windows.resourcedictionary.aspx

찰스 패졸드의 WPF의 21장 Resource 부분을 보면,

"리소스는 ResourceDictionary 타입의 객체로 저장되고
ResourceDictionary 타입의 Resource 프로퍼티를 정의할 수 있는 기본적인
3개의 클래스에는 FrameworkElement, FrameworkContentElement, Application이 있다.
ResourceDictionary 내의 각 항목은 객체를 식별하는 키와 함께 저장되는데,
보통 이 키는 문자열이다.
XAML은 이 리소스 키를 정의하기 위한 목적으로 x:Key 속성을 정의한다."






먼저 FrameworkElement를 상속받는 클래스 중에
위와 같이 Control 과 Panel 클래스가 있는데,
그로 인해서 Button 컨트롤이라던가 Canvas, StackPanel 같은 패널들이
각각 Resources 라는 프로퍼티를 사용하여 해당 리소스를 설정 할 수 있는 것 같습니다.

그리고 다음과 같이
FrameworkElement를 상속받은 엘리먼트들은 Resources라는 절을 이용해서
해당  엘리먼트의 리소를 정의 한다고 할 수 있습니다.

<StackPanel>
<StackPanel.Resources>
...
</StackPanel.resources>
</StackPanel>

또한 Resources절에 정의된 리소스는 Resources 절내에서
다음과 같은 형태를 가질수 있습니다.

<SomeType x:Key="myKey" ...>
...
</SomeType>

그래서 이렇게 정의된 리소스는
ResourceDictionary 타입의 객체로 저장되고
ResourceDictionary 내의 각 항목은 x:Key 에서
정의된 키 이름과 함께 그 값이 저장되는것 같습니다.

예를 들어 다음과 같습니다.

<Window x:Class="ResourceDictionaryEx.Window1"
    xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="clr-namespace:System;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">
  
    <StackPanel x:Name="test">
        <StackPanel.Resources>
            <s:Double x:Key="fontsizeLarge">18.3</s:Double>
            <s:Double x:Key="fontsizeSmall">14.3</s:Double>
           
        </StackPanel.Resources>    
    </StackPanel>
   
</Window>

위의 XAML에서 StackPanel에 Resources 절을 이용해서
fontsizeLarge와 fontsizeSmall 이라는 두 개의 리소스를 정의 했습니다.
그러면 이 리소스들은
ResourceDictionary 타입의 객체로 저장되고 각각
fontsizeLarge 라는 Key와 18.3 이라는 Value
fontsizeSmall 라는 Key와 14.3 이라는 Value
로 저장 되는 것 같습니다.

마지막으로 한번 테스트 해봤습니다.



근데 제가 제대로 이해한 건지 확신이 안가네요 ^^;;

Posted by JMSOFT

댓글을 달아 주세요

티스토리 툴바