Bläddra i källkod

refactor(ui): 列表失焦时自动取消选中以优化交互

yangkaixiang 1 månad sedan
förälder
incheckning
e572e0cce8

+ 3 - 3
windows/NetworkTool.Client/DeviceDetailsWindow.xaml

@@ -188,7 +188,7 @@
                                                         <RowDefinition Height="Auto" />
                                                     </Grid.RowDefinitions>
                                                       <TextBlock Style="{StaticResource SectionTitleStyle}" Text="IP 地址" />
-                                                     <DataGrid Grid.Row="1" Margin="18,10,0,0" ItemsSource="{Binding Addresses}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
+                                                     <DataGrid Grid.Row="1" Margin="18,10,0,0" ItemsSource="{Binding Addresses}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" LostKeyboardFocus="ConfigGrid_OnLostKeyboardFocus" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
                                                          <DataGrid.Style>
                                                              <Style TargetType="DataGrid" BasedOn="{StaticResource ConfigDataGridStyle}">
                                                                  <Setter Property="IsEnabled" Value="True" />
@@ -282,7 +282,7 @@
                                                             </CheckBox.Style>
                                                         </CheckBox>
                                                     </StackPanel>
-                                                      <DataGrid Grid.Row="2" Margin="18,8,0,0" ItemsSource="{Binding Routes}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
+                                                      <DataGrid Grid.Row="2" Margin="18,8,0,0" ItemsSource="{Binding Routes}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" LostKeyboardFocus="ConfigGrid_OnLostKeyboardFocus" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
                                                           <DataGrid.Style>
                                                               <Style TargetType="DataGrid" BasedOn="{StaticResource ConfigDataGridStyle}">
                                                                   <Setter Property="Visibility" Value="Collapsed" />
@@ -337,7 +337,7 @@
                                                         <RowDefinition Height="Auto" />
                                                     </Grid.RowDefinitions>
                                                       <TextBlock Style="{StaticResource SectionTitleStyle}" Text="DNS" />
-                                                     <DataGrid Grid.Row="1" Margin="18,10,0,0" Style="{StaticResource ConfigDataGridStyle}" ItemsSource="{Binding Dns}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
+                                                     <DataGrid Grid.Row="1" Margin="18,10,0,0" Style="{StaticResource ConfigDataGridStyle}" ItemsSource="{Binding Dns}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" LostKeyboardFocus="ConfigGrid_OnLostKeyboardFocus" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
                                                          <DataGrid.Columns>
                                                              <DataGridTextColumn Header="DNS 地址" Binding="{Binding Address, UpdateSourceTrigger=PropertyChanged}" ElementStyle="{StaticResource ConfigDataGridTextStyle}" EditingElementStyle="{StaticResource ConfigDataGridEditingTextStyle}" Width="*" />
                                                              <DataGridTemplateColumn Header="操作" Width="72">

+ 17 - 0
windows/NetworkTool.Client/DeviceDetailsWindow.xaml.cs

@@ -848,6 +848,23 @@ public partial class DeviceDetailsWindow : Window
         ContentScrollViewer.RaiseEvent(eventArg);
     }
 
+    private void ConfigGrid_OnLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
+    {
+        if (sender is not DataGrid dataGrid)
+        {
+            return;
+        }
+
+        Dispatcher.BeginInvoke(() =>
+        {
+            if (!dataGrid.IsKeyboardFocusWithin)
+            {
+                dataGrid.UnselectAllCells();
+                dataGrid.UnselectAll();
+            }
+        }, System.Windows.Threading.DispatcherPriority.Input);
+    }
+
     private void AddAddressButton_OnClick(object sender, RoutedEventArgs e)
     {
         if ((sender as FrameworkElement)?.DataContext is not InterfaceEditor editor)

+ 6 - 5
windows/NetworkTool.Client/MainWindow.xaml

@@ -211,11 +211,12 @@
                             <ListView x:Name="DiscoveredDevicesListView"
                                        Grid.Row="2"
                                        Margin="0,12,0,0"
-                                      MinHeight="220"
-                                      Style="{StaticResource DiscoveryListViewStyle}"
-                                      ItemContainerStyle="{StaticResource DiscoveryListViewItemStyle}"
-                                      MouseDoubleClick="DiscoveredDevicesListView_OnMouseDoubleClick"
-                                      SizeChanged="DiscoveredDevicesListView_OnSizeChanged">
+                                       MinHeight="220"
+                                       Style="{StaticResource DiscoveryListViewStyle}"
+                                       ItemContainerStyle="{StaticResource DiscoveryListViewItemStyle}"
+                                       LostKeyboardFocus="DiscoveredDevicesListView_OnLostKeyboardFocus"
+                                       MouseDoubleClick="DiscoveredDevicesListView_OnMouseDoubleClick"
+                                       SizeChanged="DiscoveredDevicesListView_OnSizeChanged">
                                 <ListView.View>
                                     <GridView ColumnHeaderContainerStyle="{StaticResource DiscoveryColumnHeaderStyle}">
                                         <GridViewColumn x:Name="DeviceIpColumn" Width="150" Header="IP">

+ 16 - 0
windows/NetworkTool.Client/MainWindow.xaml.cs

@@ -293,6 +293,22 @@ public partial class MainWindow : Window
         DeviceMacColumn.Width = Math.Max(180, availableWidth - DeviceIpColumn.Width - DeviceHostnameColumn.Width);
     }
 
+    private void DiscoveredDevicesListView_OnLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
+    {
+        if (sender is not ListView listView)
+        {
+            return;
+        }
+
+        Dispatcher.BeginInvoke(() =>
+        {
+            if (!listView.IsKeyboardFocusWithin)
+            {
+                listView.SelectedItem = null;
+            }
+        }, DispatcherPriority.Input);
+    }
+
     private async Task ConnectToDeviceAsync(DiscoveredDevice device)
     {
         var deviceKey = GetDevicePasswordKey(device);

+ 1 - 1
windows/NetworkTool.Client/NetworkTool.Client.csproj

@@ -6,7 +6,7 @@
     <Nullable>enable</Nullable>
     <ImplicitUsings>enable</ImplicitUsings>
     <UseWPF>true</UseWPF>
-    <InformationalVersion>2026.05.13.1623</InformationalVersion>
+    <InformationalVersion>2026.05.13.1648</InformationalVersion>
   </PropertyGroup>
 
 </Project>