2009-11-03 6 views
2

app.xaml에 사용자 정의 명명 된 스타일을 추가했습니다.리소스 사전의 DataTemplates는 app.xaml 스타일을 상속하지 않습니까?

외부 리소스 사전 (app.xaml의 병합 된 사전에 첨부)을 만들었으며 rcource 사전에서 위의 스타일 중 하나를 사용하려고하면 스타일이 없다고 말합니다.

또한 기본 스타일 (전체 애플리케이션에 적용되는 이름없는 스타일)은 템플릿 요소에 적용되지 않습니다.

참고 : 템플릿의 빌드 작업은 '페이지'입니다.

<Application x:Class="Application" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
    ShutdownMode="OnExplicitShutdown"> 
    <Application.Resources> 
     <ResourceDictionary> 

      <Style 
        x:Key="StackPanelStyle" 
        TargetType="StackPanel" 
        BasedOn="{StaticResource {x:Type StackPanel}}"> 
       <Setter Property="Margin" Value="5"/> 
       <Setter Property="Orientation" Value="Horizontal" /> 
       <Setter Property="Height" Value="40"/> 
      </Style> 

      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/Templates/DataTemplate1.xaml"/> 
       <ResourceDictionary Source="/Templates/DataTemplate2.xaml"/> 
       <ResourceDictionary Source="/Templates/DataTemplate3.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

이 데이터 템플릿의 예 :

<DataTemplate DataType="{x:Type Entity}" x:Key="NameDataTemplate"> 
    <Expander> 
     <StackPanel> 
      <--The following line produces: StackPanelStyle was not found.--> 
      <StackPanel Style="{StaticResource StackPanelStyle}"> 
       <Label Content="Name:"/> 
       <TextBox Text="{Binding Name}"/> 
      </StackPanel> 
     </StackPanel> 
    </Expander> 
</DataTemplate> 

모든 아이디어를 여기


내 코드를 작성하는 방법의 예입니다? 사전을 다른 방식으로 병합해야합니까?

+0

호기심에서 벗어나서, 어떤 리소스 사전 파일에'NameDataTemplate'이 저장되어 있습니까? – devuxer

+0

그냥 예제 일 뿐이므로, DataTemplates가 병합되기 전에 스타일이 app.xaml에 표시된다는 것을 강조했습니다. – Shimmy

답변

3

리소스 사전의 DataTemplate이 어떤 코드를 사용하고 있는지 알지 못하기 때문에 코드가 제대로 작동하지 않습니다. 이 사용되었습니다. 할리우드 모드처럼. 그들은 따로 따로 집계했다.

이 작업을 수행하려면 app.xaml의 스타일을 DataTemplate의 동일한 리소스 사전에 넣거나이 커플 링이 마음에 들지 않으면 을 다른 리소스 사전에 넣고 병합 할 수 있습니다 그것을 DataTemplate의 리소스 사전에 저장합니다.

+0

"Holywood 모드"... – Shimmy

+1

: D, 일명. "전화 하지마, 내가 너에게 전화 할거야." 그래서 리소스 사전은 어떤 리소스를 호출 할 지 모르기 때문에 외부의 스타일을 모릅니다. – redjackwong

+0

잘하셨습니다 ..."다른 리소스 사전에 넣고 DataTemplate의 리소스 사전에 병합 할 수 있습니다." - 내가 사용했던거야. 나는 이것이 가장 적절한 답이라고 생각합니다. 그래서 사람들이 첫눈에 그것을 볼 수 있도록 대담하게 만들거나 답을 붙이십시오. – Shimmy

1

App.xaml의 빌드 동작은 ApplicationDefinition이어야하며 리소스 사전 파일의 빌드 동작은 Page이어야합니다. 나는 그들이 당신이 이미 기본값에 대해 언급했음을 알기 때문에 그것들이 맞다는 것을 짐작하고있다.

귀하의 상황에 다른 문제는 생각할 수 없습니다. 정적 리소스가 올바른 순서로 정의되어 있으면 애플리케이션을 실행할 때 정적 리소스를 찾을 수 있어야합니다.

편집

디버깅 아이디어 : 간단한 버튼 스타일로 "TestDictionary.xaml"라는 신선한 리소스 사전을 만듭니다. 이 사전이 다른 사전 (DataTemplate1.xaml 등)과 같은 폴더에 있는지 확인하십시오. MergedDictionaries에 TestDictionary에만 대한 링크를 추가하십시오 (다른 것들을 주석 처리하십시오). 시작 창에 단추를 놓고 스타일을 적용하십시오. 그게 효과가 있는지보십시오. 실패하면 병합에 문제가 있음을 알게됩니다. 성공하면 DataTemplate에 대한 문제 일 수 있습니다.

관련 문제