Procházet zdrojové kódy

feat(ui): 网卡未选时显示占位提示并优化刷新逻辑

yangkaixiang před 1 měsícem
rodič
revize
4a7135f8a2

+ 13 - 7
windows/NetworkTool.Client/MainWindow.xaml

@@ -134,10 +134,10 @@
                                 <Grid.ColumnDefinitions>
                                     <ColumnDefinition Width="*" />
                                 </Grid.ColumnDefinitions>
-                                <ComboBox x:Name="AdapterComboBox"
-                                          MinHeight="36"
-                                          VerticalContentAlignment="Center"
-                                          SelectionChanged="AdapterComboBox_OnSelectionChanged">
+                                 <ComboBox x:Name="AdapterComboBox"
+                                           MinHeight="36"
+                                           VerticalContentAlignment="Center"
+                                           SelectionChanged="AdapterComboBox_OnSelectionChanged">
                                     <ComboBox.ItemTemplate>
                                         <DataTemplate>
                                             <Grid>
@@ -153,9 +153,15 @@
                                                            Text="{Binding IPv4Display}" />
                                             </Grid>
                                         </DataTemplate>
-                                    </ComboBox.ItemTemplate>
-                                </ComboBox>
-                            </Grid>
+                                     </ComboBox.ItemTemplate>
+                                 </ComboBox>
+                                <TextBlock x:Name="AdapterPlaceholderTextBlock"
+                                           Margin="12,0,0,0"
+                                           VerticalAlignment="Center"
+                                           Foreground="#9CA3AF"
+                                           IsHitTestVisible="False"
+                                           Text="请选择本机网卡" />
+                             </Grid>
                         </StackPanel>
                     </Border>
 

+ 15 - 5
windows/NetworkTool.Client/MainWindow.xaml.cs

@@ -50,17 +50,19 @@ public partial class MainWindow : Window
         AdapterComboBox.ItemsSource = _adapters;
 
         var selected = selectedAdapterId is null
-            ? _networkAdapterService.GetRecommendedAdapter(_adapters)
-            : _adapters.FirstOrDefault(adapter => adapter.Id == selectedAdapterId) ?? _networkAdapterService.GetRecommendedAdapter(_adapters);
+            ? null
+            : _adapters.FirstOrDefault(adapter => adapter.Id == selectedAdapterId);
 
         if (selected is not null)
         {
             AdapterComboBox.SelectedItem = selected;
         }
-        else if (_adapters.Count > 0)
+        else
         {
-            AdapterComboBox.SelectedIndex = 0;
+            AdapterComboBox.SelectedIndex = -1;
         }
+
+        UpdateAdapterPlaceholder();
     }
 
     private static bool IsUsableAdapter(AdapterInfo adapter)
@@ -73,11 +75,13 @@ public partial class MainWindow : Window
         if (AdapterComboBox.SelectedItem is not AdapterInfo adapter)
         {
             ClearDiscoveredDevices();
+            UpdateAdapterPlaceholder();
             SetStatus("请选择一块网卡。", StatusMessageType.Warning, false);
             UpdateButtonStates();
             return;
         }
 
+        UpdateAdapterPlaceholder();
         if (!adapter.HasLink)
         {
             ClearDiscoveredDevices();
@@ -90,12 +94,18 @@ public partial class MainWindow : Window
         _ = SearchDevicesAsync(adapter);
     }
 
+    private void UpdateAdapterPlaceholder()
+    {
+        AdapterPlaceholderTextBlock.Visibility = AdapterComboBox.SelectedItem is null ? Visibility.Visible : Visibility.Collapsed;
+    }
+
     private async void RefreshAdaptersButton_OnClick(object sender, RoutedEventArgs e)
     {
         SetBusyState(true, "正在刷新本机网卡...");
         try
         {
-            RefreshAdapters();
+            var selectedAdapterId = (AdapterComboBox.SelectedItem as AdapterInfo)?.Id;
+            RefreshAdapters(selectedAdapterId);
             SetStatus("已刷新本机网卡。", StatusMessageType.Success, true);
         }
         catch (Exception ex)