Search

'ResourceDictionary'에 해당되는 글 1건

  1. 2010.03.08 Simple Tip -- ResourceDictionary동적 생성을 위한 x:Class의 활용

2010.3.8 내용 추가.

x:Class
를 이용한 ResourceDictionary 동적 생성의 또 하나의 응용으로 Storyboard - Completed Event problem 가 있습니다.

 
 Storyboard - Completed Event problem 단지 Storyboard에 대한 예였으나 이를 “Resource에 추가한 객체에 이벤트를 추가시키는 법으로 일반화 시켜서 생각해 볼 수 있겠습니다.

-------------------------------------------------------------------------------------------------------

이것은 그냥 간단한 팁입니다.

WPF로 프로그래밍을 하다 보면 간혹 동적으로 ResourceDictionary를 사용하고 싶을 때가 있습니다. 런타임상에 별도의 ResourceDictionary를 로드해 해당 Dictionary의 특정 Key에 해당되는 Value를 사용하고 싶다는 것이지요. 이럴때 보통 XamlReader를 이용해 ResourceDictionary.xaml을 Load한 뒤 해당 ResourceDictionary로 캐스팅 해서 사용하게 되는데요, 이런 목적이라면 x:Class를 활용하는 것이 더 괜찮을 수 있습니다.

먼저 ResourceDictionary를 프로젝트에 추가합니다.

 

그리고 동일한 이름으로 '동일한이름.xaml.cs'를 추가합니다.

아래와 같이 Project에 페어링 된 형태로 추가된 것을 확인할 수 있습니다.

이를 확인하고 Dictionary.xaml.cs를 다음과 같이 수정합니다.

public partial class Dictionary : ResourceDictionary
{
    
public Dictionary() 
    
{
         
InitializeComponent(); 
     }
 
}

이 때 InitializeComponent 메소드가 존재하지 않기 때문에 Error List에 InitializeComponent메소드가 존재하지 않는다는 에러가 추가됨을 확인할 수 있습니다.

InitializeComponent메소드를 만들어 줘야 합니다. 어떻게 만들어 주냐? Dictionary.xaml에 X:Class를 추가해주면 됩니다.

<ResourceDictionary

x:Class="HierarchicalDataGridTest.Dictionary"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

 

</ResourceDictionary>

빌드가 성공함을 알 수 있습니다. 이제 코드에서 ResourceDictionary dic = new Dictionary(); 이와 같이 ResourceDictionary를 손쉽게 만들어 사용할 수 있습니다.

좀 더 나가면 이렇게 만든 Dictionary는 WPF Component Repository의 역할을 수행할 수도 있습니다.

public partial class Dictionary : ResourceDictionary

    
public Dictionary() 
    

         
InitializeComponent();
    

    
public Style MyButtonStyle 
    

         
get { return this["MyButton"] as Style; } 
    
}
}

신고