SSPC-Tester/SSPCTester.UI/Views/MainWindow.xaml

238 lines
16 KiB
Plaintext
Raw Normal View History

<Window x:Class="SSPCTester.UI.Views.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:vm="clr-namespace:SSPCTester.UI.ViewModels"
xmlns:v="clr-namespace:SSPCTester.UI.Views"
mc:Ignorable="d"
Title="固态功率控制器动态参数检测系统"
Width="1440" Height="900"
WindowState="Maximized"
WindowStartupLocation="CenterScreen"
Background="{StaticResource BgAppBrush}"
d:DataContext="{d:DesignInstance Type=vm:MainViewModel}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="48" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- ====== 标题栏 ====== -->
<Border Grid.Row="0" Background="{StaticResource BgTitlebarBrush}"
BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,0,1">
<Grid Margin="20,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Grid.Column="0">
<Viewbox Width="22" Height="22" Margin="0,0,12,0">
<Canvas Width="24" Height="24">
<Path Data="{StaticResource LogoGeometry}" Fill="{StaticResource PrimaryBrush}" />
</Canvas>
</Viewbox>
<TextBlock Text="固态功率控制器动态参数检测系统"
FontSize="{StaticResource FsTitle}" FontWeight="Bold" />
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Column="2" VerticalAlignment="Center">
<Grid Margin="0,0,8,0">
<Button x:Name="SafetyStatusButton" Width="34" Height="30" Padding="0"
Command="{Binding ToggleSafetyPanelCommand}"
ToolTip="{Binding SafetyStatusText}"
Background="Transparent" BorderBrush="{StaticResource BorderBrush}">
<Grid>
<Ellipse Width="18" Height="18" Stroke="{StaticResource BorderBrush}" StrokeThickness="1">
<Ellipse.Style>
<Style TargetType="Ellipse">
<Setter Property="Fill" Value="{StaticResource SuccessBrush}" />
<Style.Triggers>
<DataTrigger Binding="{Binding AlarmLampActive}" Value="True">
<Setter Property="Fill" Value="{StaticResource DangerBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
<TextBlock Text="!" Foreground="White" FontSize="12" FontWeight="Bold"
HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</Button>
<Popup IsOpen="{Binding SafetyPanelOpen}" PlacementTarget="{Binding ElementName=SafetyStatusButton}"
Placement="Bottom" StaysOpen="False" AllowsTransparency="True">
<Border Width="300" Margin="0,8,0,0" Padding="16"
Background="{StaticResource BgSurfaceBrush}" BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="{StaticResource RadiusMd}">
<StackPanel>
<TextBlock Text="设备安全" FontWeight="Bold" FontSize="{StaticResource FsH2}" Margin="0,0,0,12" />
<Grid Margin="0,3">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="PCI2312" /><TextBlock Grid.Column="1" Text="{Binding Pci2312ConnectionStatus}" />
</Grid>
<Grid Margin="0,3">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="报警灯" /><TextBlock Grid.Column="1" Text="{Binding SafetyStatusText}" />
</Grid>
<Grid Margin="0,3">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="电源电流" /><TextBlock Grid.Column="1" Text="{Binding SafetyPowerCurrentText}" FontFamily="{StaticResource FontMono}" />
</Grid>
<Grid Margin="0,3">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="负载电流" /><TextBlock Grid.Column="1" Text="{Binding SafetyLoadCurrentText}" FontFamily="{StaticResource FontMono}" />
</Grid>
<TextBlock Text="{Binding SafetyDetailText}" TextWrapping="Wrap"
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,8,0,12" />
<Button Content="复位报警灯" Command="{Binding ResetSafetyAlarmCommand}" HorizontalAlignment="Stretch" />
</StackPanel>
</Border>
</Popup>
</Grid>
<Grid>
<Button x:Name="DeviceStatusButton" Padding="10,4" BorderThickness="0"
Background="{Binding DevicesConnected, Converter={StaticResource StatusToSoftBrush}, ConverterParameter=Pass}"
Command="{Binding ToggleDevicePanelCommand}" ToolTip="查看和控制硬件连接">
<StackPanel Orientation="Horizontal">
<Ellipse Width="8" Height="8" Margin="0,0,6,0" VerticalAlignment="Center"
Fill="{Binding DevicesConnected, Converter={StaticResource StatusToBrush}, ConverterParameter=Pass}" />
<TextBlock Text="{Binding DeviceSummary}" VerticalAlignment="Center" FontSize="{StaticResource FsSmall}" />
</StackPanel>
</Button>
<Popup IsOpen="{Binding DevicePanelOpen}" PlacementTarget="{Binding ElementName=DeviceStatusButton}"
Placement="Bottom" StaysOpen="False" AllowsTransparency="True">
<Border Width="330" Margin="0,8,0,0" Padding="16"
Background="{StaticResource BgSurfaceBrush}" BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="{StaticResource RadiusMd}">
<StackPanel>
<TextBlock Text="硬件设备状态" FontWeight="Bold" FontSize="{StaticResource FsH2}" Margin="0,0,0,12" />
<Grid Margin="0,3">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="SSPC Modbus" /><TextBlock Grid.Column="1" Text="{Binding SspcConnectionStatus}" />
</Grid>
<Grid Margin="0,3">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="电源 UDP5080" /><TextBlock Grid.Column="1" Text="{Binding PowerConnectionStatus}" />
</Grid>
<Grid Margin="0,3">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="IT8702P 电子负载" /><TextBlock Grid.Column="1" Text="{Binding LoadConnectionStatus}" />
</Grid>
<Grid Margin="0,3">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="PCIe8586 高速采集卡" /><TextBlock Grid.Column="1" Text="{Binding DaqConnectionStatus}" />
</Grid>
<Grid Margin="0,3,0,12">
<Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions>
<TextBlock Text="PCI2312 安全输入输出" /><TextBlock Grid.Column="1" Text="{Binding Pci2312ConnectionStatus}" />
</Grid>
<WrapPanel>
<Button Content="连接全部" Command="{Binding ConnectAllDevicesCommand}" Margin="0,0,8,8" />
<Button Content="断开全部" Command="{Binding DisconnectAllDevicesCommand}" Margin="0,0,8,8" />
<Button Content="刷新状态" Command="{Binding RefreshDevicesCommand}" Margin="0,0,0,8" />
</WrapPanel>
<Button Content="打开设备设置" Command="{Binding OpenSettingsFromDevicePanelCommand}"
HorizontalAlignment="Stretch" />
</StackPanel>
</Border>
</Popup>
</Grid>
<Button Margin="12,0,0,0" Width="34" Height="30" Padding="0"
Command="{Binding OpenSettingsCommand}"
ToolTip="系统设置" Background="Transparent" BorderBrush="Transparent">
<Viewbox Width="18" Height="18">
<Canvas Width="24" Height="24">
<Path Data="{StaticResource SettingsGeometry}" Fill="{StaticResource TextSecondaryBrush}" />
</Canvas>
</Viewbox>
</Button>
</StackPanel>
</Grid>
</Border>
<!-- ====== 主体 ====== -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="232" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 侧栏 -->
<Border Background="{StaticResource BgSidebarBrush}" BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,1,0">
<DockPanel>
<Border DockPanel.Dock="Top" Padding="12,10" BorderBrush="{StaticResource BorderSubtleBrush}" BorderThickness="0,0,0,1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="最近项目" FontWeight="Bold" VerticalAlignment="Center" />
<Button Grid.Column="1" Width="26" Height="26" Padding="0"
Command="{Binding NewProjectCommand}"
ToolTip="新建项目" Background="Transparent" BorderBrush="Transparent">
<Viewbox Width="16" Height="16">
<Canvas Width="24" Height="24">
<Path Data="{StaticResource PlusGeometry}" Fill="{StaticResource PrimaryBrush}" />
</Canvas>
</Viewbox>
</Button>
</Grid>
</Border>
<Button DockPanel.Dock="Bottom" Margin="12,8" Height="30" HorizontalContentAlignment="Left"
Padding="10,0" Command="{Binding OpenProjectsFolderCommand}">
<StackPanel Orientation="Horizontal">
<Viewbox Width="14" Height="14" Margin="0,0,6,0">
<Canvas Width="24" Height="24">
<Path Data="{StaticResource FolderGeometry}" Fill="{StaticResource TextSecondaryBrush}" />
</Canvas>
</Viewbox>
<TextBlock Text="打开项目文件夹" />
</StackPanel>
</Button>
<TreeView x:Name="ProjectTree" ItemsSource="{Binding TreeRoots}"
MouseDoubleClick="ProjectTree_MouseDoubleClick" Padding="6,6">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type vm:ProjectNode}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Title}" Padding="0,2" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</DockPanel>
</Border>
<!-- 内容区 -->
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- 测试进行中状态条 -->
<Border Grid.Row="0" Padding="16,10"
Background="{StaticResource TestingBarBrush}"
BorderBrush="{StaticResource TestingBarBorderBrush}"
BorderThickness="0,0,0,1"
Visibility="{Binding CurrentSession, Converter={StaticResource NullToVis}}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Ellipse Width="10" Height="10" VerticalAlignment="Center" Fill="{StaticResource WarningBrush}" />
<TextBlock Grid.Column="1" Margin="10,0,0,0" VerticalAlignment="Center"
FontWeight="SemiBold" Foreground="{StaticResource TestingBarTextBrush}"
Text="{Binding TestingMessage}" />
<Button Grid.Column="2" Style="{StaticResource DangerButton}" Content="中止测试"
Command="{Binding AbortTestCommand}" />
</Grid>
</Border>
<ContentControl Grid.Row="1" Content="{Binding CurrentView}" Margin="0" />
</Grid>
</Grid>
</Grid>
</Window>