From 8d344c1b64a4b88fa78a46c0825f5d71c557a815 Mon Sep 17 00:00:00 2001
From: chr <chrry550@163.com>
Date: 星期五, 01 三月 2024 15:31:14 +0800
Subject: [PATCH] 优化DataGridUI;完善拖拽;

---
 UI/Test/SequnceList.xaml |  314 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 227 insertions(+), 87 deletions(-)

diff --git a/UI/Test/SequnceList.xaml b/UI/Test/SequnceList.xaml
index 54a58d6..38396cb 100644
--- a/UI/Test/SequnceList.xaml
+++ b/UI/Test/SequnceList.xaml
@@ -1,87 +1,227 @@
-锘�<UserControl x:Class="WPFProject.UI.Test.SequnceList"
-             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
-             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-             xmlns:local="clr-namespace:WPFProject.UI.Test"
-             
-             mc:Ignorable="d" 
-             Background="#FFF"
-             d:DesignHeight="450" d:DesignWidth="800">
-    <UserControl.Resources>
-        <ResourceDictionary>
-            <ResourceDictionary.MergedDictionaries>
-                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
-                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/WindowResources.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/ListViewStyle.xaml"/>
-            </ResourceDictionary.MergedDictionaries>
-
-            <Style TargetType="Label"></Style>
-            <Style TargetType="ListView"></Style>
-            <Color x:Key="DarkPrimaryColor">#e17933</Color>
-            <Color x:Key="PrimaryColor">#e17933</Color>
-
-        </ResourceDictionary>
-    </UserControl.Resources>
-    
-    <Grid>
-        <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="3*"/>
-            <ColumnDefinition Width="2"/>
-            <ColumnDefinition Width="7*"/>
-        </Grid.ColumnDefinitions>
-        <ListView ItemContainerStyle="{StaticResource a}" ItemsSource="{Binding Sequences}" BorderThickness="0">
-
-            <ListView.ItemTemplate>
-                <DataTemplate>
-                    <ContentControl Content="{Binding Name}"/>
-                </DataTemplate>
-            </ListView.ItemTemplate>
-        </ListView>
-
-        <GridSplitter Grid.Column="1" Background="LightGray" HorizontalAlignment="Center" Width="2" ResizeDirection="Columns"/>
-
-        <Grid Grid.Column="2">
-            <Grid.RowDefinitions>
-                <RowDefinition Height="30"/>
-                <RowDefinition/>
-            </Grid.RowDefinitions>
-            <Label Content="娴嬭瘯娴佺▼" VerticalContentAlignment="Center"/>
-
-            <DataGrid x:Name="dataGrid" AutoGenerateColumns="False" FrozenColumnCount="1" Background="#FFF" Grid.Row="1" 
-                      BorderThickness="0"
-                      ItemsSource="{Binding Steps}">
-                <DataGrid.Columns>
-                    <DataGridTextColumn IsReadOnly="True" Width="80" CanUserResize="False" Binding="{Binding Index}" Header="搴忓彿"/>
-
-                    <DataGridTextColumn Header="鏍囬1" Binding="{Binding Name}"></DataGridTextColumn>
-                    <DataGridTextColumn Header="鏍囬2" Binding="{Binding Name}"></DataGridTextColumn>
-                    <DataGridTextColumn Header="鏍囬3" Binding="{Binding Name}"></DataGridTextColumn>
-                    <DataGridTextColumn Header="鏍囬4" Binding="{Binding Name}"></DataGridTextColumn>
-
-                    <DataGridTemplateColumn x:Name="opt" Width="120" CanUserResize="False" Header="鎿嶄綔">
-                        <DataGridTemplateColumn.CellTemplate>
-                            <DataTemplate>
-                                <StackPanel Orientation="Horizontal">
-                                    <Button Style="{StaticResource LinkButton}" Margin="0,0,20,0">123</Button>
-                                    <Button Style="{StaticResource LinkButton}">鍒犻櫎</Button>
-                                </StackPanel>
-                            </DataTemplate>
-                        </DataGridTemplateColumn.CellTemplate>
-                    </DataGridTemplateColumn>
-                </DataGrid.Columns>
-            </DataGrid>
-
-            <!--<ListView >
-                <ListView.View>
-                    <GridView>
-                        
-                    </GridView>
-                </ListView.View>
-            </ListView>-->
-        </Grid>
-
-    </Grid>
-</UserControl>
+锘�<UserControl x:Class="WPFProject.UI.Test.SequnceList"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:WPFProject.UI.Test"
+             xmlns:hc="https://handyorg.github.io/handycontrol"
+             xmlns:dd="urn:gong-wpf-dragdrop"
+             
+             mc:Ignorable="d" 
+             Background="#FFF"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
+                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
+                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
+                <ResourceDictionary Source="/WPFProject;component/Style/WindowResources.xaml"/>
+                <ResourceDictionary Source="/WPFProject;component/Style/ListViewStyle.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <Style TargetType="Label"></Style>
+            <Style TargetType="ListView"></Style>
+
+            <Style TargetType="DataGridRow" x:Key="CommonRow" BasedOn="{StaticResource DataGridRowStyle}">
+                <Setter Property="Margin" Value="0"/>
+                <Setter Property="Template">
+                    <Setter.Value>
+                        <ControlTemplate TargetType="DataGridRow">
+                            <SelectiveScrollingGrid>
+                                <SelectiveScrollingGrid.ColumnDefinitions>
+                                    <ColumnDefinition Width="Auto"/>
+                                    <ColumnDefinition Width="*"/>
+                                </SelectiveScrollingGrid.ColumnDefinitions>
+                                <SelectiveScrollingGrid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="Auto"/>
+                                </SelectiveScrollingGrid.RowDefinitions>
+                                <Border Grid.ColumnSpan="2" x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"/>
+                                <DataGridCellsPresenter MinHeight="{TemplateBinding MinHeight}" VerticalContentAlignment="Center" Grid.Row="0" Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
+                                <DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType=DataGrid}}" Visibility="{TemplateBinding DetailsVisibility}"/>
+                                <DataGridRowHeader Grid.Row="0" Grid.Column="0" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
+                            </SelectiveScrollingGrid>
+                        </ControlTemplate>
+                    </Setter.Value>
+                </Setter>
+                <Style.Triggers>
+                    <Trigger Property="IsMouseOver" Value="true">
+                        <Setter Property="Background" Value="{StaticResource SecondaryImportant}"/>
+                    </Trigger>
+                    <Trigger Property="IsSelected" Value="True">
+                        <Setter Property="Background" Value="{StaticResource Important}"/>
+                        <Setter Property="TextElement.Foreground" Value="#FFF"/>
+                    </Trigger>
+                    <!--<MultiTrigger>
+                        <MultiTrigger.Conditions>
+                            <Condition Property="IsSelected" Value="true"/>
+                            <Condition Property="Selector.IsSelectionActive" Value="false"/>
+                        </MultiTrigger.Conditions>
+                        <Setter Property="Background" Value="{DynamicResource DarkDefaultBrush}"/>
+                        <Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}"/>
+                    </MultiTrigger>-->
+                </Style.Triggers>
+
+            </Style>
+
+            <Style TargetType="DataGridColumnHeader" x:Key="CommonColumnHeader">
+                <Setter Property="BorderBrush" Value="{Binding Path=HorizontalGridLinesBrush,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGrid}}"/>
+                <Setter Property="BorderThickness" Value="0,1,1,1"/>
+
+                <Style.Triggers>
+                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Column.DisplayIndex}" Value="0">
+                        <Setter Property="BorderThickness" Value="1,1,1,1"/>
+                    </DataTrigger>
+                </Style.Triggers>
+            </Style>
+
+            <Style TargetType="DataGridCell" x:Key="CommonCell" BasedOn="{StaticResource DataGridCellStyle}">
+                <Setter Property="BorderBrush" Value="{Binding Path=HorizontalGridLinesBrush,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGrid}}"/>
+                <Setter Property="BorderThickness" Value="0,0,1,1"/>
+                <Setter Property="Padding" Value="0"/>
+                <Setter Property="Template">
+                    <Setter.Value>
+                        <ControlTemplate TargetType="DataGridCell">
+                            <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
+                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
+                            </Border>
+                        </ControlTemplate>
+                    </Setter.Value>
+                </Setter>
+                <Style.Triggers>
+                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Column.DisplayIndex}" Value="0">
+                        <Setter Property="BorderThickness" Value="1,0,1,1"/>
+                    </DataTrigger>
+                    <MultiDataTrigger>
+                        <MultiDataTrigger.Conditions>
+                            <Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource Self}}" Value="true"/>
+                            <Condition Binding="{Binding SelectionUnit,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGrid}}" Value="Cell"/>
+                        </MultiDataTrigger.Conditions>
+                        <Setter Property="Foreground" Value="{StaticResource ImportantFont}"/>
+                        <Setter Property="Background" Value="{StaticResource Important}"/>
+                    </MultiDataTrigger>
+                    <MultiDataTrigger>
+                        <MultiDataTrigger.Conditions>
+                            <Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource Self}}" Value="true"/>
+                            <Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="False"/>
+                            <Condition Binding="{Binding SelectionUnit,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGrid}}" Value="CellOrRowHeader"/>
+                        </MultiDataTrigger.Conditions>
+                        <Setter Property="Foreground" Value="{StaticResource ImportantFont}"/>
+                        <Setter Property="Background" Value="{StaticResource Important}"/>
+                    </MultiDataTrigger>
+                    <MultiDataTrigger>
+                        <MultiDataTrigger.Conditions>
+                            <Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource Self}}" Value="true"/>
+                            <Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="True"/>
+                            <Condition Binding="{Binding SelectionUnit,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGrid}}" Value="CellOrRowHeader"/>
+                        </MultiDataTrigger.Conditions>
+                        <Setter Property="Foreground" Value="{StaticResource ImportantFont}"/>
+                    </MultiDataTrigger>
+                    <MultiDataTrigger>
+                        <MultiDataTrigger.Conditions>
+                            <Condition Binding="{Binding IsSelected,RelativeSource={RelativeSource Self}}" Value="true"/>
+                            <Condition Binding="{Binding SelectionUnit,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGrid}}" Value="FullRow"/>
+                        </MultiDataTrigger.Conditions>
+                        <Setter Property="Foreground" Value="{StaticResource ImportantFont}"/>
+                    </MultiDataTrigger>
+                    <MultiTrigger>
+                        <MultiTrigger.Conditions>
+                            <Condition Property="IsSelected" Value="true"/>
+                            <Condition Property="Selector.IsSelectionActive" Value="false"/>
+                        </MultiTrigger.Conditions>
+                        <Setter Property="Foreground" Value="{StaticResource ImportantFont}"/>
+                        <Setter Property="Background" Value="{StaticResource Important}"/>
+                    </MultiTrigger>
+                </Style.Triggers>
+            </Style>
+
+            <Style TargetType="DataGrid" BasedOn="{StaticResource DataGridBaseStyle}">
+                <Setter Property="GridLinesVisibility" Value="None"/>
+                <Setter Property="HorizontalGridLinesBrush" Value="Gray"/>
+                <Setter Property="RowStyle" Value="{StaticResource CommonRow}"/>
+                <Setter Property="CellStyle" Value="{StaticResource CommonCell}"/>
+                <Setter Property="ColumnHeaderStyle" Value="{StaticResource CommonColumnHeader}"/>
+                <Setter Property="hc:BorderElement.CornerRadius" Value="0" />
+                <Setter Property="RowHeight" Value="30"/>
+            </Style>
+
+        </ResourceDictionary>
+    </UserControl.Resources>
+    
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="3*"/>
+            <ColumnDefinition Width="2"/>
+            <ColumnDefinition Width="7*"/>
+        </Grid.ColumnDefinitions>
+        <ListView ItemContainerStyle="{StaticResource a}" ItemsSource="{Binding Sequences}" BorderThickness="0"
+                  dd:DragDrop.IsDragSource="True"
+                    dd:DragDrop.IsDropTarget="True"
+                    dd:DragDrop.ShowAlwaysDropTargetAdorner="True"
+                    dd:DragDrop.UseDefaultDragAdorner="True"
+                  SelectionChanged="ListView_SelectionChanged">
+
+            <ListView.ItemTemplate>
+                <DataTemplate>
+                    <ContentControl Content="{Binding Name}"/>
+                </DataTemplate>
+            </ListView.ItemTemplate>
+        </ListView>
+
+        <GridSplitter Grid.Column="1" Background="LightGray" HorizontalAlignment="Center" Width="2" ResizeDirection="Columns"/>
+
+        <Grid Grid.Column="2">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"/>
+                <RowDefinition/>
+            </Grid.RowDefinitions>
+            <Label Content="娴嬭瘯娴佺▼" VerticalContentAlignment="Center"/>
+
+            <DataGrid x:Name="dataGrid" AutoGenerateColumns="False" 
+                       
+                      CanUserAddRows="False"
+                      CanUserSortColumns="False"
+                      FrozenColumnCount="1" Background="#FFF" Grid.Row="1" 
+                      BorderThickness="0"
+                      dd:DragDrop.IsDragSource="True"
+                      dd:DragDrop.IsDropTarget="True"
+                      dd:DragDrop.ShowAlwaysDropTargetAdorner="True"
+                      dd:DragDrop.UseDefaultDragAdorner="True"
+                    
+                      dd:DragDrop.SelectDroppedItems="True"
+                      dd:DragDrop.DropHandler="{Binding dropHandler}"
+                      
+                      ItemsSource="{Binding Steps}">
+                <DataGrid.Columns>
+                    <DataGridTextColumn IsReadOnly="True" Binding="{Binding Index}" Header="搴忓彿"/>
+
+                    <DataGridTextColumn Header="鏍囬1" Binding="{Binding Name}"></DataGridTextColumn>
+                    <DataGridTextColumn Header="鏍囬2" Binding="{Binding Name}"></DataGridTextColumn>
+                    <DataGridTextColumn Header="鏍囬3" Binding="{Binding Name}"></DataGridTextColumn>
+                    <DataGridTextColumn Header="鏍囬4" Binding="{Binding Name}"></DataGridTextColumn>
+
+                    <DataGridTemplateColumn x:Name="opt" Width="*" Header="鎿嶄綔">
+                        <DataGridTemplateColumn.CellTemplate>
+                            <DataTemplate>
+                                <StackPanel Orientation="Horizontal">
+                                    <Button Style="{StaticResource LinkButton}" Margin="0,0,20,0">123</Button>
+                                    <Button Style="{StaticResource LinkButton}">鍒犻櫎</Button>
+                                </StackPanel>
+                            </DataTemplate>
+                        </DataGridTemplateColumn.CellTemplate>
+                    </DataGridTemplateColumn>
+                </DataGrid.Columns>
+            </DataGrid>
+
+            <!--<ListView >
+                <ListView.View>
+                    <GridView>
+                        
+                    </GridView>
+                </ListView.View>
+            </ListView>-->
+        </Grid>
+
+    </Grid>
+</UserControl>

--
Gitblit v1.9.1