From 0940f31b7eba1cf6b6a8c1fca72d97cf686e79f2 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 04 七月 2025 10:43:00 +0800
Subject: [PATCH] 优化插件,完善TreeListView

---
 Plugin.SeqEditor/SeqEditor.xaml |  375 ++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 322 insertions(+), 53 deletions(-)

diff --git a/Plugin.SeqEditor/SeqEditor.xaml b/Plugin.SeqEditor/SeqEditor.xaml
index 173f331..0867528 100644
--- a/Plugin.SeqEditor/SeqEditor.xaml
+++ b/Plugin.SeqEditor/SeqEditor.xaml
@@ -5,6 +5,7 @@
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:Plugin.SeqEditor"
              mc:Ignorable="d" 
+             xmlns:hcu="clr-namespace:HMI.Core.Util;assembly=HMI.Core"
              xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
              xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
 xmlns:ui="clr-namespace:HMI.UI;assembly=HMI.UI"
@@ -12,6 +13,7 @@
 xmlns:pu="https://opensource.panuon.com/wpf-ui"
 xmlns:dp="clr-namespace:HMI.UI.DpUtil;assembly=HMI.UI"
 xmlns:util="clr-namespace:Plugin.SeqEditor.Util"
+        xmlns:dd="urn:gong-wpf-dragdrop"
         xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
              d:DesignHeight="450" d:DesignWidth="800">
     <i:Interaction.Triggers>
@@ -22,14 +24,29 @@
     <UserControl.Resources>
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonDataGrid.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Controls/MultiCombox.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Controls/TreeGrid/Themes/TreeListView.xaml"/>
                 <ResourceDictionary Source="/HMI.UI;component/Controls/TreeGrid/Themes/TreeItemContentControl.xaml"/>
                 <ResourceDictionary Source="/HMI.UI;component/Controls/TreeGrid/Themes/TreeGrid.xaml"/>
             </ResourceDictionary.MergedDictionaries>
+
+            <uic:IndentConverter x:Key="IndentConverter"/>
 
             <Style TargetType="pu:FormGroup">
                 <Setter Property="Padding" Value="0,10"/>
                 <Setter Property="HeaderFontSize" Value="14"/>
                 <Setter Property="HeaderFontWeight" Value="Bold"/>
+            </Style>
+
+            <Style x:Key="TreeTogg" TargetType="ToggleButton">
+                <Setter Property="Template">
+                    <Setter.Value>
+                        <ControlTemplate>
+                            <Border Width="0"/>
+                        </ControlTemplate>
+                    </Setter.Value>
+                </Setter>
             </Style>
 
             <!-- 鏍慓rid缁勪欢 -->
@@ -42,6 +59,92 @@
                 </CollectionViewSource.GroupDescriptions>
             </CollectionViewSource>
 
+            <hcu:BindingProxy x:Key="BindingProxy" Data="{Binding}"/>
+
+            <ContextMenu x:Key="stepContextMenu">
+                <ContextMenu.Resources>
+                    <Style TargetType="MenuItem">
+                        <Setter Property="DataContext" Value="{Binding Data,Source={StaticResource BindingProxy}}"/>
+                    </Style>
+                </ContextMenu.Resources>
+                <MenuItem Header="鎻掑叆Step">
+                    <MenuItem Header="Tests">
+                        <!--<MenuItem Header="Pass/Fail" Command="{Binding AddStepCommand}" 
+                              CommandParameter="Tests.PassFail"/>
+                        <MenuItem Header="MultiNumber" Command="{Binding AddStepCommand}"
+CommandParameter="Tests.NI_MultipleNumericLimitTest"/>-->
+                        <MenuItem Header="Number" Command="{Binding AddStepCommand}"
+CommandParameter="Tests.NumericLimitTest"/>
+                        <MenuItem Header="String" Command="{Binding AddStepCommand}"
+CommandParameter="Tests.StringValueTest"/>
+                    </MenuItem>
+
+                    <!--<MenuItem Header="Actions">
+                        <MenuItem Header="LabVIEW" Command="{Binding AddStepCommand}"
+CommandParameter="Actions.LabVIEW"/>
+                        <MenuItem Header="LabWindows/CVI" Command="{Binding AddStepCommand}"
+CommandParameter="Actions.LabWindows/CVI"/>
+                        <MenuItem Header="C/C++ DLL" Command="{Binding AddStepCommand}" 
+                              CommandParameter="Actions.C/C++ DLL"/>
+                        <MenuItem Header=".NET" Command="{Binding AddStepCommand}" 
+          CommandParameter="Actions..NET"/>
+
+                        <MenuItem Header="ActiveX/COM" Command="{Binding AddStepCommand}" 
+CommandParameter="Actions.ActiveX/COM"/>
+
+                        <MenuItem Header="None" Command="{Binding AddStepCommand}" 
+CommandParameter="Actions.None"/>
+
+                        <MenuItem Header="LabVIEW NXG" Command="{Binding AddStepCommand}"
+CommandParameter="Actions.LabVIEW NXG"/>
+                        <MenuItem Header="Python" Command="{Binding AddStepCommand}"
+CommandParameter="Actions.Python"/>
+                    </MenuItem>-->
+                </MenuItem>
+            </ContextMenu>
+
+            <Style x:Key="treeCell" TargetType="DataGridCell">
+                <Setter Property="Background" Value="Transparent"/>
+                <Setter Property="Padding" Value="5"/>
+                <Setter Property="Margin" Value="0"/>
+                <Setter Property="BorderThickness" Value="0"/>
+                <Setter Property="VerticalAlignment" Value="Stretch"/>
+                <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment,
+                    RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=1,AncestorType=ui:TreeDataGrid}}"/>
+                <Setter Property="HorizontalContentAlignment" 
+                        Value="{Binding HorizontalContentAlignment,
+    RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=1,AncestorType=ui:TreeDataGrid}}"/>
+            </Style>
+
+            <Style x:Key="stepRowStyle" TargetType="ui:TreeDataGridRow">
+                <Setter Property="ContextMenu" Value="{StaticResource stepContextMenu}"/>
+                <Setter Property="DetailsVisibility" Value="Collapsed"/>
+
+                <Style.Triggers>
+                    <Trigger Property="IsSelected" Value="True">
+                        <Setter Property="Background" Value="{StaticResource PrimaryColor}"/>
+                    </Trigger>
+                </Style.Triggers>
+            </Style>
+
+            <Style x:Key="sb" TargetType="ui:TreeDataGrid" BasedOn="{StaticResource DefaultDataGrid}">
+                <Setter Property="pu:DataGridHelper.RowHeaderSeparatorVisibility" Value="Visible"/>
+                <Setter Property="pu:DataGridHelper.RowHeaderSeparatorBrush" Value="#FFF"/>
+                <Setter Property="AreRowDetailsFrozen" Value="False"/>
+                <Setter Property="HeadersVisibility" Value="Column"/>
+                <Setter Property="DataGridCell.VerticalContentAlignment" Value="Center"/>
+                <Setter Property="DataGridCell.HorizontalContentAlignment" Value="Left"/>
+            </Style>
+
+            <Style x:Key="gvh" TargetType="GridViewColumnHeader">
+                <Setter Property="Background" Value="{DynamicResource VerBar}"/>
+            </Style>
+
+            <DataTemplate x:Key="gvht">
+                <Border Padding="6">
+                    <TextBlock Foreground="#FFF" Text="{Binding }"/>
+                </Border>
+            </DataTemplate>
         </ResourceDictionary>
     </UserControl.Resources>
     <Border Style="{StaticResource CardBoarder}" Padding="0">
@@ -64,7 +167,7 @@
                     <Button Style="{StaticResource SaveBtn}" Content="{DynamicResource se.save}" Command="{Binding SaveSeqFileCommand}"/>
                     <Button Style="{StaticResource SaveBtn}" pu:ButtonHelper.Icon="&#xe60b;"
                             Content="{DynamicResource se.saveTo}" 
-                            Command="{Binding SaveSeqFileCommand}"/>
+                            Command="{Binding SaveToFileCommand}" Cursor="Hand"/>
                     <Button Style="{StaticResource DelBtn}" Content="{DynamicResource se.close}"
                             pu:ButtonHelper.Icon="&#xe609;"
                             Command="{Binding CloseSeqFileCommand}"/>
@@ -75,7 +178,20 @@
 
                 <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource ContentFontSize2}" 
                            Margin="20,0,0,0"
-VerticalAlignment="Bottom" LineHeight="{StaticResource TitleFontSize}" HorizontalAlignment="Left" Text="{Binding CurrentFileName}"/>
+VerticalAlignment="Bottom" LineHeight="{StaticResource TitleFontSize}" HorizontalAlignment="Left">
+                <Run Text="{Binding CurrentFileName}"/>
+                <Run DataContext="{Binding CurrentSeqUI}">
+                    <Run.Style>
+                        <Style TargetType="Run">
+                            <Style.Triggers>
+                                <DataTrigger Binding="{Binding IsChanged}" Value="True">
+                                    <Setter Property="Text" Value="*"/>    
+                                </DataTrigger>
+                            </Style.Triggers>
+                        </Style>
+                    </Run.Style>
+                </Run>
+                </TextBlock>
             </DockPanel>
 
             <!--<pu:FormGroup Header="{DynamicResource se.seq}" Orientation="Vertical" Grid.Row="1" Grid.Column="0">
@@ -91,36 +207,11 @@
             </pu:FormGroup>-->
             <pu:FormGroup Grid.Row="1" Grid.Column="1" Header="姝ラ绫诲瀷" Style="{StaticResource InputFormGroupStyle}">
                 <StackPanel Orientation="Horizontal">
-
-                    <!--<ComboBox Text="{Binding TargetType}" 
-                              MinWidth="180" Margin="0,0,10,0" x:Name="CbFilter"
-                        SelectedValuePath="DataValue" IsEditable="True" >
-                        <ComboBox.ItemTemplate>
-                            <DataTemplate DataType="util:ItemData">
-                                <StackPanel Orientation="Horizontal">
-                                    <CheckBox IsChecked="{Binding IsChecked}" />
-                                    <TextBlock Text="{Binding DisplayName}" />
-                                </StackPanel>
-                            </DataTemplate>
-                        </ComboBox.ItemTemplate>
-                    </ComboBox>-->
-
                     <ui:MultiComboBox SelectedValues="{Binding TargetType}"
-                                      Style="{StaticResource FormComboxStyle}"
                                       pu:ComboBoxHelper.ClearButtonVisibility="Collapsed"
-                                      MinWidth="180" Margin="0,0,10,0" x:Name="CbFilter" IsEditable="True" IsReadOnly="True" >
-                        <ui:MultiComboBox.ItemTemplate>
-                            <DataTemplate DataType="util:ItemData">
-                                <StackPanel Orientation="Horizontal">
-                                    <CheckBox IsChecked="{Binding IsChecked,UpdateSourceTrigger=PropertyChanged}" />
-                                    <TextBlock Text="{Binding DisplayName}" />
-                                </StackPanel>
-                            </DataTemplate>
-                        </ui:MultiComboBox.ItemTemplate>
+                                      Width="450" Margin="0,0,10,0" x:Name="CbFilter" IsEditable="True" IsReadOnly="True" >
+
                     </ui:MultiComboBox>
-
-                    <!--<ComboBox Style="{StaticResource FormComboxStyle}" MinWidth="180" Margin="0,0,10,0" x:Name="CbFilter"/>-->
-
                     <Button Style="{StaticResource RfhBtn}" Command="{Binding RefreshCommand}"/>
                 </StackPanel>
             </pu:FormGroup>
@@ -190,43 +281,46 @@
                         </DataGridTemplateColumn>
                     </DataGrid.Columns>
                                  ItemsSource="{Binding AllSteps,Converter={StaticResource treeC}}"
+                                 PreviewMouseWheel="treeDataGrid_PreviewMouseWheel"
                 </DataGrid>-->
 
-                <ui:TreeDataGrid Grid.Row="1" x:Name="treeDataGrid"
-                                 VirtualizingPanel.IsContainerVirtualizable="True"
-                                VirtualizingPanel.IsVirtualizing="True"
-                                VirtualizingPanel.VirtualizationMode="Recycling"
-                                ScrollViewer.CanContentScroll="False"
-                                 VirtualizingPanel.IsVirtualizingWhenGrouping="True"
-                                EnableColumnVirtualization="True"
-                                EnableRowVirtualization="True"
-                                 PreviewMouseWheel="treeDataGrid_PreviewMouseWheel"
+                <!--<ui:TreeDataGrid Grid.Row="1" x:Name="treeDataGrid"
+                                          dd:DragDrop.IsDragSource="True"
+dd:DragDrop.IsDropTarget="True"
+dd:DragDrop.ShowAlwaysDropTargetAdorner="True"
+dd:DragDrop.UseDefaultDragAdorner="True"
+                                 dd:DragDrop.DropHandler="{Binding StepDropHandler}"
+                                 SelectionUnit="FullRow"
                                  AutoGenerateColumns="False"
-                                 IsReadOnly="True"
+                                 CanUserAddRows="False"
                                  Style="{StaticResource DefaultDataGrid}"
-                ItemsSource="{Binding Source={StaticResource TreeGridFilter}}"
+                                 ItemsSource="{Binding TreeCollection,IsAsync=True}"
                                  SelectedItem="{Binding TreeItemData}">
-
-                    <!--<DataGrid.GroupStyle>
+                    <DataGrid.GroupStyle>
                         <GroupStyle>
+                            <GroupStyle.Panel>
+                                <ItemsPanelTemplate>
+                                    <DataGridRowsPresenter/>
+                                </ItemsPanelTemplate>
+                            </GroupStyle.Panel>
                             <GroupStyle.ContainerStyle>
                                 <Style TargetType="{x:Type GroupItem}">
-                                    <Setter Property="Margin" Value="0,0,0,5" />
                                     <Setter Property="Template">
                                         <Setter.Value>
                                             <ControlTemplate TargetType="{x:Type GroupItem}">
-                                                <GroupBox Header="{Binding Name}">
+                                                <Expander BorderThickness="0" Background="DarkCyan" 
+                                                          Header="{Binding Name}" IsExpanded="True">
                                                     <ItemsPresenter />
-                                                </GroupBox>
+                                                </Expander>
                                             </ControlTemplate>
                                         </Setter.Value>
                                     </Setter>
                                 </Style>
                             </GroupStyle.ContainerStyle>
                         </GroupStyle>
-                    </DataGrid.GroupStyle>-->
+                    </DataGrid.GroupStyle>
 
-                    <ui:TreeDataGrid.Columns>
+                    <DataGrid.Columns>
                         <DataGridTemplateColumn IsReadOnly="True" Width="Auto">
                             <DataGridTemplateColumn.CellTemplate>
                                 <DataTemplate>
@@ -235,12 +329,187 @@
                             </DataGridTemplateColumn.CellTemplate>
                         </DataGridTemplateColumn>
 
-                        <DataGridTextColumn Header="鍚嶇О" Width="1*" Binding="{Binding Data.Name}"></DataGridTextColumn>
-                        <DataGridTextColumn Header="绫诲瀷" Width="1*" Binding="{Binding Data.Type}"></DataGridTextColumn>
-                        <DataGridTextColumn Header="鎻忚堪" Width="7*" Binding="{Binding  Data.Description}"></DataGridTextColumn>
-                        <DataGridTextColumn Header="RunMode" Width="*" Binding="{Binding Data.RunMode}"></DataGridTextColumn>
-                    </ui:TreeDataGrid.Columns>
-                </ui:TreeDataGrid>
+                        <DataGridTextColumn Width="1*" Binding="{Binding Data.Name}">
+                            <DataGridTextColumn.Header>
+                                <TextBlock Text="{DynamicResource se.name}"/>
+                            </DataGridTextColumn.Header>
+                        </DataGridTextColumn>
+
+                        <DataGridTextColumn Width="1*" Binding="{Binding Data.Type}">
+                            <DataGridTextColumn.Header>
+                                <TextBlock Text="{DynamicResource se.type}"/>
+                            </DataGridTextColumn.Header>
+                        </DataGridTextColumn>
+
+                        <DataGridTextColumn Width="6*" Binding="{Binding Data.Description}">
+                            <DataGridTextColumn.Header>
+                                <TextBlock Text="{DynamicResource se.description}"/>
+                            </DataGridTextColumn.Header>
+                        </DataGridTextColumn>
+
+                        <DataGridTemplateColumn Width="1*">
+                            <DataGridTemplateColumn.Header>
+                                <TextBlock Text="{DynamicResource se.runMode}"/>
+                            </DataGridTemplateColumn.Header>
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <Grid x:Name="border" Margin="0">
+                                        <TextBlock x:Name="text" Margin="-1" Padding="0" VerticalAlignment="Center"/>
+                                    </Grid>
+                                    <DataTemplate.Triggers>
+                                        <DataTrigger Binding="{Binding Data.RunMode}" Value="Normal">
+                                            <Setter TargetName="text" Property="Text" Value="{DynamicResource se.normal}"/>
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding Data.RunMode}" Value="Skip">
+                                            <Setter TargetName="text" Property="Text" Value="{DynamicResource se.skip}"/>
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding Data.RunMode}" Value="Pass">
+                                            <Setter TargetName="text" Property="Text" Value="{DynamicResource se.pass}"/>
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding Data.RunMode}" Value="Fail">
+                                            <Setter TargetName="text" Property="Text" Value="{DynamicResource se.fail}"/>
+                                        </DataTrigger>
+                                    </DataTemplate.Triggers>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </ui:TreeDataGrid>-->
+
+
+                <ui:TreeListView Grid.Row="1" Grid.Column="1" ItemsSource="{Binding AllSteps}"
+                                 dd:DragDrop.IsDragSource="True"
+                                 dd:DragDrop.IsDropTarget="True"
+                                 dd:DragDrop.DropTargetAdornerBrush="Red"
+                                 dd:DragDrop.DropHandler="{Binding StepDropHandler}"
+                                 SizeChanged="TreeListView_SizeChanged">
+                    <i:Interaction.Triggers>
+                        <i:EventTrigger EventName="SelectedItemChanged">
+                            <i:InvokeCommandAction Command="{Binding SbCommand}" PassEventArgsToCommand="True"/>
+                        </i:EventTrigger>
+                        <i:EventTrigger EventName="PreviewMouseRightButtonDown">
+                            <i:InvokeCommandAction Command="{Binding Sb2Command}" PassEventArgsToCommand="True"/>
+                        </i:EventTrigger>
+                    </i:Interaction.Triggers>
+                    <ui:TreeListView.Resources>
+                        <Style x:Key="CellBorder" TargetType="Border">
+                            <Setter Property="Padding" Value="5"/>
+                            <Setter Property="BorderBrush" Value="{DynamicResource CommonBoarder}"/>
+                            <Setter Property="BorderThickness" Value="1,0,0,1"/>
+                            <Setter Property="Margin" Value="-6,0"/>
+                        </Style>
+                    </ui:TreeListView.Resources>
+
+                    <ui:TreeListView.Style>
+                        <Style TargetType="ui:TreeListView" BasedOn="{StaticResource DefaultTreeView}">
+                            <Setter Property="pu:TreeViewHelper.ToggleArrowToggleButtonStyle" Value="{StaticResource TreeTogg}"/>
+                            <Setter Property="pu:TreeViewHelper.ItemsPadding" Value="0"/>
+                            <Setter Property="Background" Value="#FFF"/>
+                            <Setter Property="ColumnHeaderContainerStyle" Value="{StaticResource gvh}"/>
+                            <Setter Property="Template">
+                                <Setter.Value>
+                                    <ControlTemplate TargetType="ui:TreeListView">
+                                        <Border BorderBrush="{TemplateBinding BorderBrush}"
+                BorderThickness="{TemplateBinding BorderThickness}"
+                Background="{TemplateBinding Background}">
+                                            <Grid>
+                                                <Grid.RowDefinitions>
+                                                    <RowDefinition Height="Auto"/>
+                                                    <RowDefinition/>
+                                                </Grid.RowDefinitions>
+                                                <GridViewHeaderRowPresenter
+                                                    Grid.Row="0" Columns="{TemplateBinding Columns}">
+                                                    <GridViewHeaderRowPresenter.ColumnHeaderContainerStyle>
+                                                        <Style TargetType="GridViewColumnHeader">
+                                                            <Setter Property="Background" Value="{DynamicResource VerBar}"/>
+                                                        </Style>
+                                                    </GridViewHeaderRowPresenter.ColumnHeaderContainerStyle>
+                                                </GridViewHeaderRowPresenter>
+                                                <ScrollViewer Grid.Row="1" Padding="{TemplateBinding Padding}" VerticalScrollBarVisibility="Auto">
+                                                    <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
+                                                </ScrollViewer>
+                                            </Grid>
+                                        </Border>
+                                    </ControlTemplate>
+                                </Setter.Value>
+                            </Setter>
+                        </Style>
+                    </ui:TreeListView.Style>
+
+                    <ui:TreeListView.Columns>
+                        <GridViewColumn Header="鍚嶇О" HeaderContainerStyle="{StaticResource gvh}"
+                                        HeaderTemplate="{StaticResource gvht}">
+                            <GridViewColumn.CellTemplate>
+                                <DataTemplate>
+                                    <Border Style="{StaticResource CellBorder}">
+                                        <StackPanel Orientation="Horizontal">
+                                            <ToggleButton x:Name="Expander"
+      Style="{StaticResource ExpandCollapseToggleStyle}"
+                                          Margin="{Binding level,Converter={StaticResource IndentConverter},RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ui:TreeListViewItem,AncestorLevel=1}}"
+      Grid.Column="0"
+IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ui:TreeListViewItem,AncestorLevel=1}}"
+ClickMode="Press"/>
+                                            <TextBlock Margin="5,0,0,0" Padding="6,0" Text="{Binding Name}"/>
+                                        </StackPanel>
+                                    </Border>
+
+                                    <DataTemplate.Triggers>
+                                        <DataTrigger Binding="{Binding HasItems, 
+RelativeSource={RelativeSource Mode=FindAncestor,
+AncestorType=ui:TreeListViewItem,AncestorLevel=1}}"
+         Value="False">
+                                            <Setter Property="Visibility" Value="Hidden" TargetName="Expander"/>
+                                        </DataTrigger>
+                                    </DataTemplate.Triggers>
+                                </DataTemplate>
+                            </GridViewColumn.CellTemplate>
+                        </GridViewColumn>
+
+                        <GridViewColumn Header="绫诲瀷" HeaderContainerStyle="{StaticResource gvh}" 
+                                        HeaderTemplate="{StaticResource gvht}">
+                            <GridViewColumn.CellTemplate>
+                                <DataTemplate>
+                                    <Border Style="{StaticResource CellBorder}">
+                                        <TextBlock Padding="6,0" Text="{Binding Type}"/>
+                                    </Border>
+                                </DataTemplate>
+                            </GridViewColumn.CellTemplate>
+                        </GridViewColumn>
+
+                        <GridViewColumn Header="鎻忚堪" HeaderContainerStyle="{StaticResource gvh}"
+                                        HeaderTemplate="{StaticResource gvht}">
+                            <GridViewColumn.CellTemplate>
+                                <DataTemplate>
+                                    <Border Style="{StaticResource CellBorder}">
+                                        <TextBlock Padding="6,0" Text="{Binding Description}"/>
+                                    </Border>
+                                </DataTemplate>
+                            </GridViewColumn.CellTemplate>
+                        </GridViewColumn>
+
+                        <GridViewColumn Header="{DynamicResource se.runMode}" 
+                                        Width="80"
+                                        HeaderContainerStyle="{StaticResource gvh}" 
+                                        HeaderTemplate="{StaticResource gvht}">
+                            <GridViewColumn.CellTemplate>
+                                <DataTemplate>
+                                    <Border Style="{StaticResource CellBorder}" BorderThickness="1,0,1,1">
+                                        <TextBlock Padding="6,0" Text="{Binding RunMode}"/>
+                                    </Border>
+                                </DataTemplate>
+                            </GridViewColumn.CellTemplate>
+                        </GridViewColumn>
+                    </ui:TreeListView.Columns>
+
+                    <TreeView.ItemTemplate>
+                        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
+                            <GridViewRowPresenter
+                                ContextMenu="{StaticResource stepContextMenu}"
+                                          Columns="{Binding Columns, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ui:TreeListView,AncestorLevel=1}}" 
+                                          Content="{Binding }"/>
+                        </HierarchicalDataTemplate>
+                    </TreeView.ItemTemplate>
+                </ui:TreeListView>
 
             </pu:FormGroup>
 

--
Gitblit v1.9.1