从WPF中的同一资源字典中访问资源

时间:2012-03-28 10:17:34

标签: c# .net wpf xaml

我遇到了一个场景,我需要从同一资源字典中的样式中访问usercontrol的资源字典中定义的datatemplate。 xaml代码看起来像这样:

<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和样式都定义在相同的“级别”。但是,即使我将样式移动到较低级别的resourcedictionary,例如网格,它也不起作用。 我不习惯WPF风格。也欢迎与现有解决方案不同的解决方案。感谢。

1 个答案:

答案 0 :(得分:3)

HeaderTemplate属性需要DataTemplate,而不是绑定。以下是

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

应该是

<Expander HeaderTemplate="{StaticResource headertemp}">