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=""
Content="{DynamicResource se.saveTo}"
- Command="{Binding SaveSeqFileCommand}"/>
+ Command="{Binding SaveToFileCommand}" Cursor="Hand"/>
<Button Style="{StaticResource DelBtn}" Content="{DynamicResource se.close}"
pu:ButtonHelper.Icon=""
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