【发布时间】:2013-12-09 20:42:05
【问题描述】:
我有自己的基于this post 的树视图实现,但我在根据树视图项中的对象类型定义不同样式时遇到问题。我知道简单的方法是定义一个模板选择器,但是当你有两个 HierarchicalDataTemplates 时,我无法弄清楚这将如何工作。
<HierarchicalDataTemplate DataType="{x:Type domainLayer:Folder}" ItemsSource="{Binding Converter={StaticResource BaseTypeConverter}}" />
<HierarchicalDataTemplate DataType="{x:Type domainLayer:Document}" ItemsSource="{Binding Converter={StaticResource BaseTypeConverter}}" />
我使用这些模板来延迟加载我的树,效果很好。还为所有 TreeListViewItems 定义了一个样式。也许也有解决方案,但我不知道如何定义我的 TreeListViewItem 是文件夹还是文档。
非常感谢任何帮助。如果您需要更多代码,请告诉我!
上午 10:40 更新:
在样式中,为每个 TreeListViewItem 定义行:
<Style x:Key="cxc" TargetType="{x:Type local:TreeListViewItem}">
<Setter Property="FontFamily" Value="TradeGothic LT" />
<Setter Property="FontSize" Value="14px" />
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
<Setter Property="Background" Value="Transparent" />
<EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:TreeListViewItem}">
<StackPanel>
<Border Name="Bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<GridViewRowPresenter x:Name="PART_Header"
Content="{TemplateBinding Header}"
Columns="{Binding Path=Columns,RelativeSource={RelativeSource AncestorType={x:Type local:TreeListView}}}"
/>
</Border>
<ItemsPresenter x:Name="ItemsHost" />
</StackPanel>
<ControlTemplate.Triggers>
<!-- ... -->
当我将模板(StackPanel 标记中的所有内容)复制到 HierarchicalDataTemplate 时,出现错误:在“ContentPresenter”类型上找不到静态成员“BackgroundProperty”。
【问题讨论】:
-
看来我找到了解决方案,即摆脱样式并在 HierarchicalDataTemplate 中定义模板。像这样:stackoverflow.com/questions/4726318/…
标签: wpf xaml hierarchicaldatatemplate