我遇到了一个场景,我需要从同一资源字典中的样式中访问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风格。也欢迎与现有解决方案不同的解决方案。感谢。
答案 0 :(得分:3)
HeaderTemplate属性需要DataTemplate,而不是绑定。以下是
<Expander HeaderTemplate="{Binding Source={StaticResource headertemp}}">
应该是
<Expander HeaderTemplate="{StaticResource headertemp}">