-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainWindow.xaml
More file actions
341 lines (341 loc) · 23.2 KB
/
MainWindow.xaml
File metadata and controls
341 lines (341 loc) · 23.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
<Window x:Class="NetSpector.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:NetSpector"
mc:Ignorable="d"
Title="TW工作站系统快速配置工具" SizeToContent="WidthAndHeight" ResizeMode="NoResize" d:DataContext="{x:Static local:NetworkSetting.PreviewInstance}" DataContext="{x:Static local:NetworkSetting.Instance}" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Icon="app.ico" FontSize="12" FontFamily="Microsoft Yahei, 宋体" TextOptions.TextFormattingMode="Display">
<Window.Resources>
<Style TargetType="TabItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="OptionPanel" TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal"/>
<Setter Property="Width" Value="240"/>
<Setter Property="Height" Value="24"/>
<Setter Property="Margin" Value="12,8"/>
</Style>
<Style TargetType="Label">
<Setter Property="Height" Value="Auto"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="FontFamily" Value="Menlo, Cascadia Code, Consolas, Courier New, Sim Hei"/>
<Setter Property="Height" Value="Auto"/>
<Setter Property="Padding" Value="4,0"/>
<Setter Property="MaxLength" Value="24"/>
<Setter Property="TextWrapping" Value="NoWrap"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style TargetType="Button">
</Style>
<Style TargetType="Label" x:Key="Label_Separator">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="UseLayoutRounding" Value="True"/>
<Setter Property="Foreground" Value="Gray"/>
<Setter Property="Height" Value="Auto"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="18"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Separator Grid.Column="0" Background="Gray" VerticalAlignment="Center"/>
<ContentPresenter Grid.Column="1" Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"/>
<Separator Grid.Column="2" Background="Gray" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<TabControl Margin="8,8,8,48" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" SelectionChanged="TabControl_SelectionChanged">
<TabItem Header="本地网络接口配置">
<WrapPanel Width="528" Margin="0,4">
<Label Content="计算机属性" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="计算机名称:" Width="120"/>
<TextBox Width="120">
<TextBox.Text>
<Binding Path="MachineName" FallbackValue="CRSCD-HOST">
<Binding.ValidationRules>
<local:RegexValidationRule Pattern="^[A-Za-z0-9_-]*$"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="工作组名称:" Width="120"/>
<TextBox Width="120">
<TextBox.Text>
<Binding Path="WorkGroupName" FallbackValue="WORKGROUP">
<Binding.ValidationRules>
<local:RegexValidationRule Pattern="^[A-Za-z0-9_-]*$"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<Label Content="网络配置" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<StackPanel Style="{StaticResource OptionPanel}" Width="504">
<Label Content="当前网络适配器:" Width="120"/>
<ComboBox Height="Auto" SelectedIndex="{Binding NetworkSelectionIndex}" ItemsSource="{Binding NetworkNameList}" SelectionChanged="Interface_SelectionChanged" Width="292"/>
<Button Content="刷新项目" Margin="12,0,0,0" Width="80" Click="InterfaceRefresh_Click"/>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}" Width="504">
<Label Content="适配器信息:" Width="120"/>
<Label Content="{Binding NetworkStats}" Foreground="DarkSlateGray" Width="354"/>
<Path Width="24" Height="24" Margin="6,0,0,0" StrokeThickness="1.5" Data="M1 9L17 9L17 19L1 19ZM9 19L9 22M5 22L13 22M6 7L6 4L22 4L22 14L19 14">
<Path.Style>
<Style TargetType="Path">
<Setter Property="Stroke" Value="DarkSlateGray"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsNetworkOn}" Value="True">
<Setter Property="Stroke" Value="LimeGreen"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Path.Style>
</Path>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="IPV4地址:" Width="120"/>
<TextBox Width="120" TextChanged="NetworkSetting_TextChanged">
<TextBox.Text>
<Binding Path="IP" FallbackValue="192.168.1.101">
<Binding.ValidationRules>
<local:IPAddressValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="子网掩码:" Width="120"/>
<TextBox Width="120" TextChanged="NetworkSetting_TextChanged">
<TextBox.Text>
<Binding Path="Mask" FallbackValue="255.255.255.0">
<Binding.ValidationRules>
<local:IPAddressValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="网关地址:" Width="120"/>
<TextBox Width="120" TextChanged="NetworkSetting_TextChanged">
<TextBox.Text>
<Binding Path="Gateway" FallbackValue="192.168.1.1">
<Binding.ValidationRules>
<local:IPAddressValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="DNS服务器:" Width="120"/>
<TextBox Width="120" TextChanged="NetworkSetting_TextChanged">
<TextBox.Text>
<Binding Path="DNS" FallbackValue="127.0.0.1">
<Binding.ValidationRules>
<local:IPAddressValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<Label Content="快速设置" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<StackPanel Style="{StaticResource OptionPanel}" Width="504" Height="Auto">
<Label Content="选择预设配置:" Width="120"/>
<ItemsControl ItemsSource="{Binding PresetList, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Width="396" Margin="-6"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}" ToolTip="{Binding Description}" Padding="8,4" Margin="6" Click="LoadPreset_Click"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</WrapPanel>
</TabItem>
<TabItem Header="上层机配置修改">
<WrapPanel Width="528" Margin="0,4">
<Label Content="文件选择" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<StackPanel Style="{StaticResource OptionPanel}" Width="504">
<Label Content="INI文件位置:" Width="120"/>
<TextBox Text="{Binding ConfigPath}" Width="292"/>
<Button Content="读取数据" Margin="12,0,0,0" Width="80" Click="LoadConfig_Click"/>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}" Width="504" Height="Auto">
<Label Content="配置预览:" Width="120"/>
<TextBox Width="384" Height="102" TextWrapping="Wrap" IsReadOnly="True" VerticalContentAlignment="Top" Padding="4" Text="{Binding Config.Text}"/>
</StackPanel>
<Label Content="配置修改" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="主机标识:" Width="120"/>
<TextBox Width="120" TextChanged="NetworkConfig_TextChanged">
<TextBox.Text>
<Binding Path="Config.Key" FallbackValue="A">
<Binding.ValidationRules>
<local:RegexValidationRule Pattern="^[AB]*$"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="邻机名称:" Width="120"/>
<TextBox Width="120" TextChanged="NetworkConfig_TextChanged">
<TextBox.Text>
<Binding Path="Config.Neighbour" FallbackValue="CRSCD-HOSTA">
<Binding.ValidationRules>
<local:RegexValidationRule Pattern="^[A-Za-z0-9_-]*$"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="IPV4地址:" Width="120"/>
<TextBox Width="120" TextChanged="NetworkConfig_TextChanged">
<TextBox.Text>
<Binding Path="Config.IP" FallbackValue="192.168.1.101">
<Binding.ValidationRules>
<local:IPAddressValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}">
<Label Content="维护机IP地址:" Width="120"/>
<TextBox Width="120" TextChanged="NetworkConfig_TextChanged">
<TextBox.Text>
<Binding Path="Config.MaintenanceIP" FallbackValue="192.168.1.101">
<Binding.ValidationRules>
<local:IPAddressValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<Label Content="快速设置" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<StackPanel Style="{StaticResource OptionPanel}" Width="504" Height="Auto">
<Label Content="选择预设配置:" Width="120"/>
<Button Content="使用管理机A机配置" Padding="8,4" Margin="0" Tag="A" Click="LoadConfigPreset_Click"/>
<Button Content="使用管理机B机配置" Padding="8,4" Margin="12,0,0,0" Tag="B" Click="LoadConfigPreset_Click"/>
</StackPanel>
</WrapPanel>
</TabItem>
<TabItem Header="本地防火墙配置">
<WrapPanel Width="528" Margin="0,4">
<Label Content="当前防火墙状态" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<StackPanel Style="{StaticResource OptionPanel}" Width="504" Height="Auto">
<Label Content="状态信息:" Width="120"/>
<TextBox Width="384" Height="206" TextWrapping="Wrap" IsReadOnly="True" VerticalContentAlignment="Top" Padding="4" Text="{Binding Firewall.StateText}"/>
</StackPanel>
<StackPanel Style="{StaticResource OptionPanel}" Width="504">
<Label Content="防火墙状态设置:" Width="120"/>
<Control DataContext="{Binding Firewall}">
<Control.Template>
<ControlTemplate>
<StackPanel Orientation="Horizontal" Width="384">
<Path x:Name="FirewallIcon" Width="24" Height="24" Margin="0,0,6,0" StrokeThickness="1.5" Stroke="DarkRed" Data="M1 2L1 21L23 21L23 2L18 2L18 6L14 6L14 2L10 2L10 6L6 6L6 2ZM1 9L23 9M1 15L23 15M8 9L8 15M16 15L16 21"/>
<Label x:Name="FirewallLabel" Content="本地计算机已启用防火墙" Foreground="DarkSlateGray" Width="154"/>
<Button x:Name="StopFirewall" Content="关闭防火墙" Margin="12,0,0,0" Width="80" Click="StopFirewall_Click"/>
<Button x:Name="StartFirewall" Content="打开防火墙" Margin="12,0,0,0" Width="80" Click="StartFirewall_Click"/>
<Button x:Name="StopSC" Content="关闭安全中心" Margin="12,0,0,0" Width="96" Click="StopSecurityCenter_Click"/>
</StackPanel>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="True">
<Setter TargetName="FirewallLabel" Property="Content" Value="本地计算机已启用防火墙"/>
<Setter TargetName="FirewallIcon" Property="Stroke" Value="LimeGreen"/>
<Setter TargetName="StopFirewall" Property="Visibility" Value="Visible"/>
<Setter TargetName="StartFirewall" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsEnabled}" Value="False">
<Setter TargetName="FirewallLabel" Property="Content" Value="本地计算机已禁用防火墙"/>
<Setter TargetName="FirewallIcon" Property="Stroke" Value="DarkRed"/>
<Setter TargetName="StopFirewall" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="StartFirewall" Property="Visibility" Value="Visible"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Control.Template>
</Control>
</StackPanel>
<Label Content="当前端口配置" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<StackPanel Style="{StaticResource OptionPanel}" Width="504" Height="Auto">
<Label Content="端口设置:" Width="120"/>
<Button Content="禁用敏感网络端口" Padding="8,4" Margin="0" Click="BlockPort_Click"/>
</StackPanel>
</WrapPanel>
</TabItem>
<TabItem Header="系统服务管理">
<StackPanel Width="528" Margin="0,4">
<Label Content="常见可关闭系统服务" Style="{StaticResource Label_Separator}" Width="528" Margin="0,4" Padding="8,0"/>
<ItemsControl ItemsSource="{x:Static local:SystemServiceManager.ServiceList}" Grid.IsSharedSizeScope="True">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Width="528" Margin="0,4"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Width="504" Height="24" Margin="12 8" IsEnabled="{Binding IsValid}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Name"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{Binding Description}" Margin="0,0,12,0"/>
<TextBox Grid.Column="1" Text="{Binding Name}" HorizontalAlignment="Stretch" IsReadOnly="True"/>
<Label Grid.Column="2" x:Name="Label_Enable" Content="已启用" Foreground="LimeGreen" Visibility="Collapsed" Margin="12,0,0,0"/>
<Label Grid.Column="2" x:Name="Label_Disable" Content="已禁用" Foreground="DarkRed" Margin="12,0,0,0"/>
<Button Grid.Column="3" x:Name="Button_Enable" Content="启用服务" Margin="12,0,0,0" Width="80" Click="ServiceEnable_Click"/>
<Button Grid.Column="3" x:Name="Button_Disable" Content="禁用服务" Visibility="Collapsed" Margin="12,0,0,0" Width="80" Click="ServiceDisable_Click"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="True">
<Setter TargetName="Button_Enable" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="Button_Disable" Property="Visibility" Value="Visible"/>
<Setter TargetName="Label_Enable" Property="Visibility" Value="Visible"/>
<Setter TargetName="Label_Disable" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</TabItem>
</TabControl>
<StackPanel Orientation="Horizontal" Height="40" Margin="4" VerticalAlignment="Bottom" HorizontalAlignment="Left">
<Button Margin="4" Padding="12,0" Content="重新启动系统" Click="Reboot_Click"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Height="40" Margin="4" VerticalAlignment="Bottom" HorizontalAlignment="Right">
<Button Margin="4" Padding="12,0" IsCancel="True" Content="关闭程序" Click="Cancel_Click"/>
<Button Margin="4" Padding="12,0" IsDefault="True" Content="应用网络配置" Click="ApplySettings_Click"/>
</StackPanel>
</Grid>
</Window>