【发布时间】:2017-01-10 09:38:12
【问题描述】:
我试图在 WPF TreeView 中的顶级分层项目之间提供分隔(边距)。问题是我无法弄清楚如何编写 Style 以使其仅适用于顶部项目而不是每个项目。
我的TreeView 的代码如下所示:
<TreeView ItemContainerStyle="{StaticResource treeViewItemStyle}"
ItemsSource="{Binding Container.RootRules}"
KeyUp="treeView_KeyUp"
SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type me:HybridForecastRulesViewModel}"
ItemsSource="{Binding Children}">
<Border Name="bd"
...
</Border>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type me:RootRulesViewModel}"
ItemsSource="{Binding Rules}">
<Grid>
...
</Grid>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
我有这样的 treeViewItems 样式:
<Style x:Key="treeViewItemStyle"
BasedOn="{StaticResource {x:Type TreeViewItem}}"
TargetType="{x:Type TreeViewItem}">
<Setter Property="Margin" Value="0,10,0,0" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsVisible}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
但是这种风格适用于两种类型的项目(RootRulesViewModel 和 HybridForecastRulesViewModel),而我希望它只适用于 RootRulesViewModel 类型的项目。如何才能做到这一点?
锦上添花的是所有RootRulesViewModel 项目的顶部Margin 为10,第一个除外。
【问题讨论】:
-
你不能在 RootRulesViewModel 的 HierarchicalDataTemplate 中的网格上设置适当的边距吗?
-
我试过了,但它只会将边距添加到项目本身,因此项目会向下移动,但左侧的箭头仍保留在原处。那样真的不好看。
-
您可以使用
0,5的边距(即底部和顶部值 5)而不是0,10,0,0。 -
嗯,这解决了标题和标记之间的对齐问题,但它也增加了顶部节点和以下子节点之间的间隙,这不是我想要的。看似如此简单的事情怎么会如此难以实现?