【问题标题】:How to set 2 color background to a TreeView (WPF)如何将 2 颜色背景设置为 TreeView (WPF)
【发布时间】: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


【解决方案1】:

您可能希望在 Style 中使用 ItemsControl.AlternationIndex 来控制循环的颜色数量(在您的情况下为 2 个)。

MSDN Docs for ItemsControl.AlternationIndex 有一个带有ListBox 的示例,您也可以适应TreeView

【讨论】:

  • 谢谢,马上就可以了!现在我正在考虑如何为完整的树视图单元格着色。
猜你喜欢
  • 2019-02-28
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2014-11-15
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多