2012-12-03 5 views
0

ToggleButton을 상속 한 사용자 지정 컨트롤 인 ColorToggleButton을 만들었습니다. 해당 .xaml 파일에서 ColorToggleButton은 TargetType 및 BasedOn ToggleButton을 통해 고유합니다.WPF 스타일 계층 구조

<Style TargetType="ctl:ColorToggleButton" BasedOn="{StaticResource {x:Type ToggleButton}}"> 

이 잘 작동하지만 내가 X를 사용하여 창에 다른 스타일을 적용하는 경우 :

<Style x:Key="SameContent"><Setter Property="Content" Value="Same Content" /></Style> 
<ctl:ColorToggleButton Style={StaticResource SameContent} /> 

같이 키를 기존의 스타일은 완전히 전멸하고 새 것으로 교체받을 것으로 보인다. 나는

<Style x:Key="SameContent" BasedOn="{StaticResource {x:Type ctl:ColorToggleButton}}"><Setter Property="Content" Value="Same Content" /></Style> 
<ctl:ColorToggleButton Style={StaticResource MyKey} /> 

BasedOn

를 사용하여 문제를 회피 할 수 있지만 이것은 내가 정상 ToggleButton을 또는 다른 기본 컨트롤에 스타일을 적용하는 경우 나는 BasedOn 속성을 사용하지 것처럼보고, 나에게 반 직관적 보인다. 이것은 자신의 컨트롤을 구현하는 표준 방법입니까? 나는 끔찍한 일을 잘못하고 있니?

편집 : 당신의 통제에서

static ColorToggleButton() 
{ 
    DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorToggleButton), new FrameworkPropertyMetadata(typeof(ColorToggleButton))); 
} 

답변

1

, 당신은 DefaultStyleKeyProperty 재정의 정적 생성자를 제공 않았다 다음과 같이 ColorToggleButton의 정적 생성자는?

static ColorToggleButton() 
{ 
      DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorToggleButton), new FrameworkPropertyMetadata(typeof(ColorToggleButton))); 
} 
+0

예, 질문도 업데이트했습니다. – user1787270