2010-06-26 3 views
1

나는이 그들을 응용 프로그램WPF 사용자 지정 컨트롤 TabItem의 기반으로 테마

의 모든 컨트롤에 확인을 적용하고 이것은 내가 TabItem의를 만들 때 TabItem의 를 포함한 모든 공용 컨트롤의 스타일을 설정 만든 generic.xaml을 테마 컨트롤을 표시하고 테마를 가져옵니다.

TabItem t = new TabItem(); 
t.Header = "Normal"; 
MainContentControl.Items.Add(t); 

내가 TabItem의

public partial class ClosableTab : TabItem 

을 기반으로하는 사용자 지정 컨트롤을 만들고 주제는 무시됩니다 그것을

ProActive.LocalControls.ClosableTab ct = new ProActive.LocalControls.ClosableTab(); 
    ct.Header = "COMP"; 
    MainContentControl.Items.Add(ct); 

를 표시하지만 때.

내 사용자 지정 컨트롤이 TabItem의 기반으로하는 경우 테마가로 적용도하지

DefaultStyleKeyProperty.OverrideMetadata(typeof(ClosableTab), new FrameworkPropertyMetadata(typeof(TabItem))); 

이유를 사용하여 defaultstyle입니다 작성을 통해 시도?

답변

0

DefaultStyleKey는 테마 스타일을 으로 찾는 데 사용됩니다. 테마 스타일은 컨트롤을 정의하는 어셈블리 또는 컨트롤 어셈블리에 지정된 ResourceDictionaryLocation에 따라 관련 어셈블리에 정의해야합니다. TabItem 테마는 PresentationFramework.Aero에 있고 WPF는 어셈블리에서 ClosableTab 테마를 찾을 것이므로 동일한 키를 가지고 있어도 찾을 수 없습니다. Here은 WPF가 테마 스타일을 찾는 방법에 대한 좋은 설명입니다.

암시 적 스타일은 실제 컨트롤 유형을 사용하여 항상 조회되므로 리소스 사전에 <Style TargetType="TabItem">이 있으면 ClosableTab에 영향을 미치지 않습니다.

ClosableTab가 TabItem의에서 암시 적 스타일을 상속해야하는 가장 쉬운 방법은 ClosableTab에 대한 암시 적 스타일을 만들어 사용하는 것입니다 BasedOn :

<Style TargetType="local:ClosableTab" BasedOn="{StaticResource {x:Type TabItem}}" /> 
관련 문제