2012-03-28 141 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}">