2012-03-28 104 views
0

我遇到了一個場景,我需要從同一資源字典中的樣式內訪問usercontrol資源字典中定義的數據模板。 xaml代碼如下所示:訪問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> 

這不起作用。我想這個問題可能是因爲datatemplate和style都是在同一個'level'級別定義的。但是,即使我將這種風格轉移到較低級別的資源詞典,比如說一個網格,它也不起作用。 我不是很習慣WPF樣式。也歡迎與現有解決方案不同的解決方案。謝謝。

+0

你是什麼意思與「它不工作」?我已經複製了示例項目中的xaml代碼片段,它工作正常,我用固定字符串替換了綁定。也許綁定是你的問題? – SvenG 2012-03-28 12:22:42

+0

你說得對。綁定是問題。我搜索了一下,發現從資源字典中綁定並不是非常簡單。如果有人能幫助我,那將會很棒。我不想通過代碼綁定。 – Tulip 2012-03-29 10:13:53

回答

3

HeaderTemplate屬性需要DataTemplate,而不是綁定。所以下面

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

應該

<Expander HeaderTemplate="{StaticResource headertemp}">