【发布时间】:2016-09-27 11:52:42
【问题描述】:
我想为自定义树视图 (wpf) 设置两种颜色背景。您可以在 DataGrid 中设置此属性。我想不出一种方法来为树视图做这件事。
我还想将元素的选择设置为与单元格一样大。
<TreeView Grid.Row="2" Name="TreeView" DataContext="{Binding Path=TreeModel}" ItemsSource="{Binding TreeItems}" SelectedItemChanged="TreeView_OnSelectedItemChanged">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:NodeViewModel}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<Label Content="{Binding NameNode}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Add" Command="{Binding AddMachinePart_Command}"/>
<MenuItem Header="Remove" Command="{Binding RemoveMachinePart_Command}" IsEnabled="{Binding IsModule}"/>
<MenuItem Header="Edit" Command="{Binding EditMachinePart_Command}" IsEnabled="{Binding IsModule}"/>
<Separator></Separator>
<MenuItem Header="Copy path" Command="{Binding CopyPath_Command}" IsEnabled="{Binding IsModule}"></MenuItem>
</ContextMenu>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
编辑: 使用解决方案时 https://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.alternationindex(v=vs.110).aspx 建议@jschroedl
最好像下图所示的树视图网格一样大:
【问题讨论】:
-
您希望树节点具有交替的背景颜色?
-
FWIW 因为树视图节点可以展开,如果在加载时设置两个相邻节点(例如最后一个子节点和下一个父节点),它们可能会以相同的背景颜色结束。如果您在节点展开或折叠时尝试动态重绘背景,则可能会因为某些节点更改背景颜色而导致用户感到困惑。
-
我在应用@jschroedl 建议的解决方案时注意到了这一点。但是,我仍然想至少通过边界来区分节点。检查我在问题中的编辑。
标签: c# wpf mvvm background treeview