2012-03-28 2 views
0

동일한 리소스 사전의 스타일에서 usercontrol의 리소스 사전에 정의 된 데이터 템플릿에 액세스해야하는 시나리오가 있습니다. 이 작동하지 않는WPF의 동일한 리소스 사전에서 리소스에 액세스

<UserControl.Resources> 
    <ResourceDictionary> 
<DataTemplate x:Key="headertemp"> 
      <WrapPanel> 
       <TextBlock Text="{Binding ProcedureName}"></TextBlock> 
       <Label Content="{Binding Status}"></Label> 
      </WrapPanel> 
     </DataTemplate> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="Background" Value="Transparent"/> 
      <Setter Property="Margin" Value="0,2,0,0"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <Expander HeaderTemplate="{Binding Source={StaticResource headertemp}}"> 
         <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Detail}" HeadersVisibility="Column"> 
          <DataGrid.Columns> 
          <DataGridTextColumn Header="Timestamp" Binding="{Binding TimeStamp}"></DataGridTextColumn> 
          <DataGridTextColumn Header="Name" Binding="{Binding ProcedureName}"></DataGridTextColumn> 
          <DataGridTextColumn Header="Details" Binding="{Binding Description}"></DataGridTextColumn> 
          </DataGrid.Columns> 
         </DataGrid> 
        </Expander> 
       </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ResourceDictionary> 

다음 XAML 코드는 다음과 같이 보인다. 나는 datatemplate과 스타일이 모두 같은 '수준'에 정의되어 있기 때문에 문제가있을 것이라고 생각했습니다. 그러나, 내가 스타일을 저수준의 소스 화 된 사전으로 옮기더라도 그리드는 작동하지 않습니다. WPF 스타일에 익숙하지 않습니다. 현재와 ​​다른 솔루션도 환영합니다. 감사.

+0

일해야 당신이 "작동하지 않는"무엇을 의미합니까? 샘플 프로젝트에서 xaml 스 니펫을 복사했는데 제대로 작동합니다. 고정 된 문자열로 바인딩을 대체했습니다. 아마도 바인딩이 문제일까요? – SvenG

+0

당신 말이 맞아요. 바인딩이 문제입니다. 나는 인터넷 검색 및 리소스 사전 내에서 바인딩 매우 간단하지 않은 것으로 나타났습니다. 누군가가 저를 도울 수 있다면 좋을 것입니다. 나는 코드를 통해 바인딩하고 싶지 않다. – Tulip

답변

3

HeaderTemplate 속성에는 바인딩이 아닌 DataTemplate이 필요합니다. 그래서 다음

<Expander HeaderTemplate="{Binding Source={StaticResource headertemp}}"> 

<Expander HeaderTemplate="{StaticResource headertemp}"> 
관련 문제