MainWindow.xaml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <Window x:Class="NetworkTool.Client.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. mc:Ignorable="d"
  7. Title="NetworkTool"
  8. Height="680"
  9. Width="860"
  10. MinHeight="640"
  11. MinWidth="760"
  12. WindowStartupLocation="CenterScreen">
  13. <Window.Resources>
  14. <Style x:Key="DiscoveryListViewStyle" TargetType="ListView">
  15. <Setter Property="Background" Value="White" />
  16. <Setter Property="BorderBrush" Value="#E5E7EB" />
  17. <Setter Property="BorderThickness" Value="1" />
  18. <Setter Property="HorizontalContentAlignment" Value="Stretch" />
  19. <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
  20. <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
  21. </Style>
  22. <Style x:Key="DiscoveryColumnHeaderStyle" TargetType="GridViewColumnHeader">
  23. <Setter Property="Height" Value="36" />
  24. <Setter Property="Padding" Value="12,0" />
  25. <Setter Property="HorizontalContentAlignment" Value="Center" />
  26. <Setter Property="VerticalContentAlignment" Value="Center" />
  27. <Setter Property="Background" Value="#F3F4F6" />
  28. <Setter Property="Foreground" Value="#374151" />
  29. <Setter Property="FontWeight" Value="SemiBold" />
  30. <Setter Property="BorderBrush" Value="#E5E7EB" />
  31. <Setter Property="BorderThickness" Value="0,0,1,1" />
  32. </Style>
  33. <Style x:Key="DiscoveryListViewItemStyle" TargetType="ListViewItem">
  34. <Setter Property="Height" Value="36" />
  35. <Setter Property="Padding" Value="0" />
  36. <Setter Property="HorizontalContentAlignment" Value="Stretch" />
  37. <Setter Property="VerticalContentAlignment" Value="Center" />
  38. <Setter Property="Template">
  39. <Setter.Value>
  40. <ControlTemplate TargetType="ListViewItem">
  41. <Border x:Name="RowBorder"
  42. Background="Transparent"
  43. BorderBrush="#EEF2F7"
  44. BorderThickness="0,0,0,1"
  45. SnapsToDevicePixels="True">
  46. <GridViewRowPresenter Margin="0"
  47. VerticalAlignment="Center"
  48. Content="{TemplateBinding Content}"
  49. Columns="{Binding View.Columns, RelativeSource={RelativeSource AncestorType=ListView}}" />
  50. </Border>
  51. <ControlTemplate.Triggers>
  52. <Trigger Property="IsMouseOver" Value="True">
  53. <Setter TargetName="RowBorder" Property="Background" Value="#F9FAFB" />
  54. </Trigger>
  55. <Trigger Property="IsSelected" Value="True">
  56. <Setter TargetName="RowBorder" Property="Background" Value="#DBEAFE" />
  57. <Setter Property="Foreground" Value="#111827" />
  58. </Trigger>
  59. <MultiTrigger>
  60. <MultiTrigger.Conditions>
  61. <Condition Property="IsSelected" Value="True" />
  62. <Condition Property="Selector.IsSelectionActive" Value="False" />
  63. </MultiTrigger.Conditions>
  64. <Setter TargetName="RowBorder" Property="Background" Value="#DBEAFE" />
  65. <Setter Property="Foreground" Value="#111827" />
  66. </MultiTrigger>
  67. </ControlTemplate.Triggers>
  68. </ControlTemplate>
  69. </Setter.Value>
  70. </Setter>
  71. </Style>
  72. <Style x:Key="DiscoveryCellTextStyle" TargetType="TextBlock">
  73. <Setter Property="Padding" Value="8,0" />
  74. <Setter Property="VerticalAlignment" Value="Center" />
  75. <Setter Property="TextTrimming" Value="CharacterEllipsis" />
  76. </Style>
  77. </Window.Resources>
  78. <Grid Background="#F5F7FB">
  79. <Border Margin="24"
  80. Padding="24"
  81. Background="White"
  82. CornerRadius="12">
  83. <Grid>
  84. <Grid.RowDefinitions>
  85. <RowDefinition Height="Auto" />
  86. <RowDefinition Height="*" />
  87. </Grid.RowDefinitions>
  88. <TextBlock FontSize="20"
  89. FontWeight="SemiBold"
  90. Foreground="#111827"
  91. Text="设备发现与连接" />
  92. <Grid Grid.Row="1" Margin="0,20,0,0">
  93. <Grid.RowDefinitions>
  94. <RowDefinition Height="Auto" />
  95. <RowDefinition Height="*" />
  96. </Grid.RowDefinitions>
  97. <Border Padding="16" Background="#F9FAFB" CornerRadius="10">
  98. <StackPanel>
  99. <Grid>
  100. <Grid.ColumnDefinitions>
  101. <ColumnDefinition Width="Auto" />
  102. <ColumnDefinition Width="Auto" />
  103. <ColumnDefinition Width="*" />
  104. <ColumnDefinition Width="Auto" />
  105. </Grid.ColumnDefinitions>
  106. <TextBlock VerticalAlignment="Center"
  107. FontSize="13"
  108. FontWeight="SemiBold"
  109. Foreground="#111827"
  110. Text="本机网卡" />
  111. <CheckBox x:Name="ShowUsableAdaptersOnlyCheckBox"
  112. Grid.Column="1"
  113. Margin="16,0,0,0"
  114. VerticalAlignment="Center"
  115. VerticalContentAlignment="Center"
  116. Checked="ShowUsableAdaptersOnlyCheckBox_OnChanged"
  117. IsChecked="True"
  118. Unchecked="ShowUsableAdaptersOnlyCheckBox_OnChanged"
  119. Content="仅显示可用网卡" />
  120. <Button x:Name="RefreshAdaptersButton"
  121. Grid.Column="3"
  122. MinHeight="32"
  123. Padding="14,0"
  124. Click="RefreshAdaptersButton_OnClick"
  125. Content="刷新" />
  126. </Grid>
  127. <Grid Margin="0,12,0,0">
  128. <Grid.ColumnDefinitions>
  129. <ColumnDefinition Width="*" />
  130. </Grid.ColumnDefinitions>
  131. <ComboBox x:Name="AdapterComboBox"
  132. MinHeight="36"
  133. VerticalContentAlignment="Center"
  134. SelectionChanged="AdapterComboBox_OnSelectionChanged">
  135. <ComboBox.ItemTemplate>
  136. <DataTemplate>
  137. <Grid>
  138. <Grid.ColumnDefinitions>
  139. <ColumnDefinition Width="Auto" />
  140. <ColumnDefinition Width="Auto" />
  141. </Grid.ColumnDefinitions>
  142. <TextBlock Grid.Column="0"
  143. Text="{Binding Name}"
  144. TextTrimming="CharacterEllipsis" />
  145. <TextBlock Grid.Column="1"
  146. Margin="12,0,0,0"
  147. Text="{Binding IPv4Display}" />
  148. </Grid>
  149. </DataTemplate>
  150. </ComboBox.ItemTemplate>
  151. </ComboBox>
  152. <TextBlock x:Name="AdapterPlaceholderTextBlock"
  153. Margin="12,0,0,0"
  154. VerticalAlignment="Center"
  155. Foreground="#9CA3AF"
  156. IsHitTestVisible="False"
  157. Text="请选择本机网卡" />
  158. </Grid>
  159. </StackPanel>
  160. </Border>
  161. <Border Grid.Row="1" Margin="0,16,0,0" Padding="16" Background="#F9FAFB" CornerRadius="10">
  162. <Grid>
  163. <Grid.RowDefinitions>
  164. <RowDefinition Height="Auto" />
  165. <RowDefinition Height="Auto" />
  166. <RowDefinition Height="*" />
  167. </Grid.RowDefinitions>
  168. <Grid>
  169. <Grid.ColumnDefinitions>
  170. <ColumnDefinition Width="*" />
  171. <ColumnDefinition Width="Auto" />
  172. <ColumnDefinition Width="Auto" />
  173. <ColumnDefinition Width="Auto" />
  174. </Grid.ColumnDefinitions>
  175. <TextBlock VerticalAlignment="Center"
  176. FontSize="13"
  177. FontWeight="SemiBold"
  178. Foreground="#111827"
  179. Text="发现设备(双击连接)" />
  180. <Button x:Name="SearchDevicesButton"
  181. Grid.Column="3"
  182. MinHeight="32"
  183. Padding="14,0"
  184. Click="SearchDevicesButton_OnClick"
  185. Content="重新搜索设备" />
  186. <ProgressBar x:Name="SearchProgressBar"
  187. Grid.Column="1"
  188. Width="72"
  189. Height="6"
  190. Margin="12,0,8,0"
  191. VerticalAlignment="Center"
  192. IsIndeterminate="True"
  193. Visibility="Collapsed" />
  194. <TextBlock x:Name="SearchProgressTextBlock"
  195. Grid.Column="2"
  196. Margin="0,0,12,0"
  197. VerticalAlignment="Center"
  198. Foreground="#6B7280"
  199. Text="搜索中"
  200. Visibility="Collapsed" />
  201. </Grid>
  202. <ListView x:Name="DiscoveredDevicesListView"
  203. Grid.Row="2"
  204. Margin="0,12,0,0"
  205. MinHeight="220"
  206. Style="{StaticResource DiscoveryListViewStyle}"
  207. ItemContainerStyle="{StaticResource DiscoveryListViewItemStyle}"
  208. LostKeyboardFocus="DiscoveredDevicesListView_OnLostKeyboardFocus"
  209. MouseDoubleClick="DiscoveredDevicesListView_OnMouseDoubleClick"
  210. SizeChanged="DiscoveredDevicesListView_OnSizeChanged">
  211. <ListView.View>
  212. <GridView ColumnHeaderContainerStyle="{StaticResource DiscoveryColumnHeaderStyle}">
  213. <GridViewColumn x:Name="DeviceIpColumn" Width="150" Header="IP">
  214. <GridViewColumn.CellTemplate>
  215. <DataTemplate>
  216. <TextBlock Style="{StaticResource DiscoveryCellTextStyle}" Text="{Binding Lan2Ip}" />
  217. </DataTemplate>
  218. </GridViewColumn.CellTemplate>
  219. </GridViewColumn>
  220. <GridViewColumn x:Name="DeviceHostnameColumn" Width="220" Header="主机名">
  221. <GridViewColumn.CellTemplate>
  222. <DataTemplate>
  223. <TextBlock Style="{StaticResource DiscoveryCellTextStyle}" Text="{Binding Hostname}" />
  224. </DataTemplate>
  225. </GridViewColumn.CellTemplate>
  226. </GridViewColumn>
  227. <GridViewColumn x:Name="DeviceMacColumn" Width="220" Header="MAC">
  228. <GridViewColumn.CellTemplate>
  229. <DataTemplate>
  230. <TextBlock Style="{StaticResource DiscoveryCellTextStyle}" Text="{Binding Mac}" />
  231. </DataTemplate>
  232. </GridViewColumn.CellTemplate>
  233. </GridViewColumn>
  234. </GridView>
  235. </ListView.View>
  236. </ListView>
  237. </Grid>
  238. </Border>
  239. </Grid>
  240. </Grid>
  241. </Border>
  242. <Border x:Name="BusyOverlay"
  243. Visibility="Collapsed"
  244. Panel.ZIndex="90"
  245. Background="#80F5F7FB">
  246. <Border HorizontalAlignment="Center"
  247. VerticalAlignment="Center"
  248. Padding="18,16"
  249. Background="White"
  250. CornerRadius="12">
  251. <Border.Effect>
  252. <DropShadowEffect BlurRadius="18" Direction="270" Opacity="0.12" ShadowDepth="6" Color="#111827" />
  253. </Border.Effect>
  254. <StackPanel>
  255. <ProgressBar Width="220"
  256. Height="6"
  257. IsIndeterminate="True" />
  258. <TextBlock x:Name="BusyMessageTextBlock"
  259. Margin="0,12,0,0"
  260. HorizontalAlignment="Center"
  261. FontSize="13"
  262. FontWeight="SemiBold"
  263. Foreground="#111827"
  264. Text="正在处理,请稍候..." />
  265. </StackPanel>
  266. </Border>
  267. </Border>
  268. <Border x:Name="StatusMessageBorder"
  269. Visibility="Collapsed"
  270. Panel.ZIndex="100"
  271. HorizontalAlignment="Center"
  272. VerticalAlignment="Top"
  273. Margin="24,16,24,0"
  274. MaxWidth="760"
  275. Padding="12,10"
  276. Background="White"
  277. CornerRadius="10">
  278. <Border.Effect>
  279. <DropShadowEffect BlurRadius="18" Direction="270" Opacity="0.16" ShadowDepth="6" Color="#111827" />
  280. </Border.Effect>
  281. <StackPanel Orientation="Horizontal">
  282. <Border x:Name="StatusIconBorder"
  283. Width="16"
  284. Height="16"
  285. Margin="0,1,10,0"
  286. VerticalAlignment="Top"
  287. Background="#508DF8"
  288. CornerRadius="8">
  289. <TextBlock x:Name="StatusIconTextBlock"
  290. HorizontalAlignment="Center"
  291. VerticalAlignment="Center"
  292. FontSize="11"
  293. FontWeight="Bold"
  294. Foreground="White"
  295. LineHeight="16"
  296. Text="i" />
  297. </Border>
  298. <TextBlock x:Name="StatusTextBlock"
  299. FontSize="13"
  300. Foreground="#1F2937"
  301. TextWrapping="Wrap"
  302. Text="" />
  303. </StackPanel>
  304. </Border>
  305. </Grid>
  306. </Window>