2014-01-30 8 views
1

Window.Resources 내에 로컬로 정의 된 스타일이 있습니다. TextBlock, TextBox, CheckBoxRadioButton에 대한 스타일이 있습니다. 이것들은 윈도우의 모든 컨트롤에 적용될 예정이므로 x:Key에 대한 값을 제공하지 않았습니다. FrameworkElement을 타겟팅하는 스타일을 상속 받고 싶습니다.다른 스타일에서 기본 스타일을 사용할 수 없음

<Style TargetType="{x:Type RadioButton}"> 
    ... 
</Style> 

<Style TargetType="{x:Type TextBlock}"> 
    ... 
</Style> 

<Style TargetType="{x:Type TextBox}"> 
    ... 
</Style> 

<Style TargetType="{x:Type CheckBox}"> 
    ... 
</Style> 

<Style x:Key="TriggerBase" TargetType="{x:Type FrameworkElement}"> 
    <Style.Triggers>     
     <Trigger Property="UIElement.IsMouseOver" Value="True"> 
      ... 
     </Trigger>     
    </Style.Triggers> 
</Style> 

내 문제는 내가 내 TriggerBase 스타일에서 상속하는 BasedOn 속성을 설정할 수 없습니다 오전입니다 : 그래서 내가 좋아하는 뭔가가있다. thisthis과 같은 유사한 질문을 본 후에도 여전히 작동하지 않습니다. 이 답변은 기본 스타일에 TargetType을 지정해야한다고 제안합니다.

어쩌면 스타일은 동일한 유형을 대상으로해야하지만, MSDN에 주위 파고 후 나는 그 문제가 아니었다 찾을 생각 :

당신이은 TargetType 속성과 스타일을 만들고 그것을 기반으로하는 경우 TargetType 속성도 정의하는 다른 스타일에서 파생 스타일의 대상 유형은 기본 스타일 유형과 동일하거나 파생되어야합니다.

내가 BasedOn="{DynamicResource TriggerBase}" 같은 BasedOn을 설정하면

, 내 TriggerBase을 찾을 수 있습니다,하지만 난라는 오류 얻을 :

A 'DynamicResourceExtension'이 'BasedOn'속성을 설정할 수 없습니다

유형의 '스타일 '. 'DynamicResourceExtension'은 DependencyObject의 DependencyProperty에서만 설정할 수 있습니다. 내가 BasedOn="{StaticResource TriggerBase}"을 시도하는 경우가 TriggerBase를 찾을 수 없습니다

, 나는 오류가 발생합니다. 위의 링크 된 답변 중 하나는 StaticResourceBasedOn="{StaticResource {x:Type FrameworkElement}과 같이 사용했으나 여전히 스타일을 해결할 수 없습니다.

TriggerBase 스타일을 어떻게 상속받을 수 있습니까? 나는 .NET 4.5를 목표로하고있다.

+1

는 그냥 코드와 시도 작동합니다 내가해야만 한 일은'TriggerBase' 스타일을 맨 위로 옮기고'BasedOn = "{StaticResource TriggerBase}"'가 작동했습니다 – dkozl

+0

덕분에, 고마워요. 주문이 중요하다는 것을 알지 못했습니다. 수업은 배웠다. 당신이 그것을 하나로 추가하고 싶다면 당신의 대답을 받아 들일 것입니다. –

답변

2

당신이 올바른지 방금 정상에

<Style x:Key="TriggerBase" TargetType="{x:Type FrameworkElement}"> 

</Style> 

를 이동해야 FrameworkElement 스타일에 대한 당신의 스타일을 기반으로 할 수 있으며 다음

<Style TargetType="{x:Type RadioButton}" BasedOn="{StaticResource TriggerBase}"> 

관련 문제