MainWindow.xaml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <Window x:Class="NetTool.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="NetTool"
  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. SizeChanged="DiscoveredDevicesListView_OnSizeChanged">
  210. <ListView.View>
  211. <GridView ColumnHeaderContainerStyle="{StaticResource DiscoveryColumnHeaderStyle}">
  212. <GridViewColumn x:Name="DeviceIpColumn" Width="150" Header="IP">
  213. <GridViewColumn.CellTemplate>
  214. <DataTemplate>
  215. <TextBlock Style="{StaticResource DiscoveryCellTextStyle}" Text="{Binding Lan2Ip}" />
  216. </DataTemplate>
  217. </GridViewColumn.CellTemplate>
  218. </GridViewColumn>
  219. <GridViewColumn x:Name="DeviceHostnameColumn" Width="220" Header="主机名">
  220. <GridViewColumn.CellTemplate>
  221. <DataTemplate>
  222. <TextBlock Style="{StaticResource DiscoveryCellTextStyle}" Text="{Binding Hostname}" />
  223. </DataTemplate>
  224. </GridViewColumn.CellTemplate>
  225. </GridViewColumn>
  226. <GridViewColumn x:Name="DeviceMacColumn" Width="220" Header="MAC">
  227. <GridViewColumn.CellTemplate>
  228. <DataTemplate>
  229. <TextBlock Style="{StaticResource DiscoveryCellTextStyle}" Text="{Binding Mac}" />
  230. </DataTemplate>
  231. </GridViewColumn.CellTemplate>
  232. </GridViewColumn>
  233. <GridViewColumn x:Name="DeviceActionColumn" Width="88" Header="操作">
  234. <GridViewColumn.CellTemplate>
  235. <DataTemplate>
  236. <Button MinHeight="26"
  237. Margin="8,0"
  238. Padding="12,0"
  239. Click="ConnectDeviceButton_OnClick"
  240. Content="连接" />
  241. </DataTemplate>
  242. </GridViewColumn.CellTemplate>
  243. </GridViewColumn>
  244. </GridView>
  245. </ListView.View>
  246. </ListView>
  247. </Grid>
  248. </Border>
  249. </Grid>
  250. </Grid>
  251. </Border>
  252. <Border x:Name="BusyOverlay"
  253. Visibility="Collapsed"
  254. Panel.ZIndex="90"
  255. Background="#80F5F7FB">
  256. <Border HorizontalAlignment="Center"
  257. VerticalAlignment="Center"
  258. Padding="18,16"
  259. Background="White"
  260. CornerRadius="12">
  261. <Border.Effect>
  262. <DropShadowEffect BlurRadius="18" Direction="270" Opacity="0.12" ShadowDepth="6" Color="#111827" />
  263. </Border.Effect>
  264. <StackPanel>
  265. <ProgressBar Width="220"
  266. Height="6"
  267. IsIndeterminate="True" />
  268. <TextBlock x:Name="BusyMessageTextBlock"
  269. Margin="0,12,0,0"
  270. HorizontalAlignment="Center"
  271. FontSize="13"
  272. FontWeight="SemiBold"
  273. Foreground="#111827"
  274. Text="正在处理,请稍候..." />
  275. </StackPanel>
  276. </Border>
  277. </Border>
  278. <Border x:Name="StatusMessageBorder"
  279. Visibility="Collapsed"
  280. Panel.ZIndex="100"
  281. HorizontalAlignment="Center"
  282. VerticalAlignment="Top"
  283. Margin="24,16,24,0"
  284. MaxWidth="760"
  285. Padding="12,10"
  286. Background="White"
  287. CornerRadius="10">
  288. <Border.Effect>
  289. <DropShadowEffect BlurRadius="18" Direction="270" Opacity="0.16" ShadowDepth="6" Color="#111827" />
  290. </Border.Effect>
  291. <StackPanel Orientation="Horizontal">
  292. <Border x:Name="StatusIconBorder"
  293. Width="16"
  294. Height="16"
  295. Margin="0,1,10,0"
  296. VerticalAlignment="Top"
  297. Background="#508DF8"
  298. CornerRadius="8">
  299. <TextBlock x:Name="StatusIconTextBlock"
  300. HorizontalAlignment="Center"
  301. VerticalAlignment="Center"
  302. FontSize="11"
  303. FontWeight="Bold"
  304. Foreground="White"
  305. LineHeight="16"
  306. Text="i" />
  307. </Border>
  308. <TextBlock x:Name="StatusTextBlock"
  309. FontSize="13"
  310. Foreground="#1F2937"
  311. TextWrapping="Wrap"
  312. Text="" />
  313. </StackPanel>
  314. </Border>
  315. </Grid>
  316. </Window>