这边使用一个TreeView来展示文档结构。
<Style TargetType="TreeView" x:Key="tvwDocStructure" BasedOn="{mah:StaticResource MahApps.Styles.TreeView.Virtualized}">
<Style.Resources>
<Style TargetType="TextBlock" x:Key="basicTB">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Margin" Value="10,1"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style TargetType="TextBlock" x:Key="plantTextStyle" BasedOn="{StaticResource basicTB}">
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="DarkRed"/>
</Style>
<Style TargetType="TextBlock" x:Key="unitTextStyle" BasedOn="{StaticResource basicTB}">
<Setter Property="FontSize" Value="11"/>
<Setter Property="Foreground" Value="Orange"/>
</Style>
<Style TargetType="TextBlock" x:Key="cabinetTextStyle" BasedOn="{StaticResource basicTB}">
<Setter Property="FontSize" Value="10"/>
<Setter Property="Foreground" Value="DodgerBlue"/>
</Style>
<Style TargetType="TextBlock" x:Key="documentTextStyle" BasedOn="{StaticResource basicTB}">
<Setter Property="FontSize" Value="9"/>
</Style>
<Style TargetType="TextBlock" x:Key="docTypeTextStyle" BasedOn="{StaticResource basicTB}">
<Setter Property="FontSize" Value="9"/>
<Setter Property="Foreground" Value="LightSeaGreen"/>
<Setter Property="Margin" Value="5 1 0 1"/>
</Style>
<Style TargetType="iconPacks:PackIconMaterial">
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<HierarchicalDataTemplate ItemsSource="{Binding Units}" DataType="{x:Type core:PlantBase}">
<StackPanel Orientation="Horizontal">
<iconPacks:PackIconMaterial Kind="AlphaPBox"/>
<TextBlock Text="{Binding PlantName}" Style="{StaticResource plantTextStyle}"/>
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit Plant"/>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Cabinets}" DataType="{x:Type core:UnitBase}">
<StackPanel Orientation="Horizontal">
<iconPacks:PackIconMaterial Kind="AlphaUBox"/>
<TextBlock Text="{Binding UnitName}" Style="{StaticResource unitTextStyle}"/>
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit Unit"/>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Documents}" DataType="{x:Type core:CabinetBase}">
<StackPanel Orientation="Horizontal">
<iconPacks:PackIconMaterial Kind="CheckboxBlank"/>
<TextBlock Text="{Binding CabinetName}" Style="{StaticResource cabinetTextStyle}"/>
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit Cabinet"/>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type core:DocumentBase}">
<StackPanel Orientation="Horizontal">
<iconPacks:PackIconMaterial Kind="TextBoxOutline"/>
<TextBlock Text="{Binding DocumentType.DocumentTypeName}" Style="{StaticResource docTypeTextStyle}"/>
<TextBlock Text="{Binding DocumentDescription}" Style="{StaticResource documentTextStyle}"/>
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Open Document"/>
<MenuItem Header="Edit Document"/>
<MenuItem Header="Edit Title Block"/>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</HierarchicalDataTemplate>
</Style.Resources>
</Style>
随便实验几个数据: