2010-03-12 3 views
0

내가 본 대부분의 WPF 스타일은 하나의 매우 긴 Theme.xaml 파일로 나뉩니다.WPF 스타일 XAML 파일 분할

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/PresentationFramework.Aero;v3.0.0.0;31bf3856ad364e35;component/themes/aero.normalcolor.xaml"/> 
     <ResourceDictionary Source="Controls/Brushes.xaml"/> 
     <ResourceDictionary Source="Controls/Buttons.xaml"/> 
     ... 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

문제는이 솔루션이 작동하지 않는다는 것입니다 : 내 Theme.xaml은 다음과 같습니다 그래서 나는 가독성을 위해 광산을 분할 할. 나는 버튼의 기본 에어로 스타일 BasedOn있는 기본 버튼 스타일을 가지고 : 나는 하나 개의 파일에이 모든 배치하면 내가 그것을 분할로가 있지만 바로 작동

<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}"> 
    <Setter Property="FontSize" Value="14"/> 
    ... 
</Style> 

예외가 생각하기 때문에 StackOverflow의 내가 얻을 그것은 BasedOn 자체입니다. 이 문제를 해결할 방법이 있습니까? WPF는 리소스 사전을 병합 할 때 리소스를 어떻게 추가합니까?

답변

0

항상 두 스타일을 적용하려는 경우 더 낮은 스타일 (나중에 재정의되는 스타일)에서 키를 변경하지 않으시겠습니까? 그런 다음 {StaticResource {x:Type Button}} 대신 해당 키를 사용하여 나중에 참조 할 것입니다. 이렇게하면 기본 유형을 결정할 때 문제가 해결됩니다. 또한 스타일이 잘못된 순서로 적용될 수있는 잠재적 인 문제를 해결합니다 (예 : 하나의 속성을 여러 번 재정의하면 해당 사전이 적용되는 순서에 따라 결과가 달라짐).

최종 자손 스타일에 올바른 키가있는 한 합계가 올바르게 적용되어야합니다.

+0

내 사용자 지정 단추 스타일이 모든 곳에서 적용되며 단추를 만들 때마다 단추 스타일을 명시 적으로 설정하지 않아도됩니다. PresentationFramework.Aero에서 기존 기본 단추 스타일을 조정하고 싶습니다. – anon

0

BasedOn을 생략하면 예상 값이없는 속성은 무엇입니까? 몇 가지 속성을 재정의 할 때 BasedOn을 안전하게 생략 할 수 있으며 기본 스타일의 템플릿이 계속 적용될 수 있습니다.