SSPC-Tester/SSPCTester.UI/Views/CurveTestView.xaml
2026-07-05 13:33:55 +08:00

223 lines
14 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<UserControl x:Class="SSPCTester.UI.Views.CurveTestView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:SSPCTester.UI.ViewModels"
xmlns:ctl="clr-namespace:SSPCTester.UI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=vm:CurveTestViewModel}">
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="3*" MinHeight="260" />
<RowDefinition Height="2*" MinHeight="180" />
</Grid.RowDefinitions>
<TextBlock Text="开启与关断曲线(覆盖指标 1.11.6" FontSize="{StaticResource FsH1}" FontWeight="Bold" Margin="0,0,0,12" />
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="320" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 左栏:参数 -->
<Border Style="{StaticResource Card}" Margin="0,0,12,0">
<StackPanel>
<TextBlock Style="{StaticResource CardTitle}" Text="采集参数" />
<TextBlock Style="{StaticResource FieldLabel}" Text="通道" />
<ComboBox ItemsSource="{Binding Channels}" SelectedItem="{Binding SelectedChannel}" Margin="0,0,0,12" />
<TextBlock Style="{StaticResource CardTitle}" Text="合格阈值 (ms)" Margin="0,8,0,12" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="8" />
<RowDefinition Height="Auto" />
<RowDefinition Height="8" />
<RowDefinition Height="Auto" />
<RowDefinition Height="8" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="开启时间" />
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Thresholds.MaxOnTimeMs}" FontFamily="{StaticResource FontMono}" />
<TextBlock Grid.Row="2" Text="上升时间" />
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Thresholds.MaxRiseTimeMs}" FontFamily="{StaticResource FontMono}" />
<TextBlock Grid.Row="4" Text="关断时间" />
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding Thresholds.MaxOffTimeMs}" FontFamily="{StaticResource FontMono}" />
<TextBlock Grid.Row="6" Text="下降时间" />
<TextBox Grid.Row="6" Grid.Column="1" Text="{Binding Thresholds.MaxFallTimeMs}" FontFamily="{StaticResource FontMono}" />
</Grid>
<Button Style="{StaticResource PrimaryButton}" Content="采集开启曲线" Margin="0,16,0,0"
Command="{Binding CaptureRisingCommand}"
IsEnabled="{Binding Busy, Converter={StaticResource InverseBoolConverter}}" />
<Button Style="{StaticResource PrimaryButton}" Content="采集关断曲线" Margin="0,8,0,0"
Command="{Binding CaptureFallingCommand}"
IsEnabled="{Binding Busy, Converter={StaticResource InverseBoolConverter}}" />
<TextBlock Margin="0,12,0,0" TextWrapping="Wrap"
Foreground="{StaticResource TextMutedBrush}"
Text="开启/关断时间以软件发送 Modbus 命令前的标记为基准,包含串口通信延迟,不等同于硬件同步触发精度。" />
</StackPanel>
</Border>
<!-- 右栏:波形 -->
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Style="{StaticResource Card}" Margin="0,0,0,6">
<DockPanel>
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource CardTitle}" Text="开启曲线电压上升90% 阈值)" />
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="起点" VerticalAlignment="Center" Margin="0,0,4,0" />
<TextBox Width="58" Height="26" Margin="0,0,8,0" Padding="4,0"
Text="{Binding RisingViewStartMs, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"
FontFamily="{StaticResource FontMono}" />
<TextBlock Text="终点" VerticalAlignment="Center" Margin="0,0,4,0" />
<TextBox Width="58" Height="26" Margin="0,0,8,0" Padding="4,0"
Text="{Binding RisingViewEndMs, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"
FontFamily="{StaticResource FontMono}" />
<Button Content="默认" Width="54" Height="26" Padding="0" Margin="0,0,8,0"
Command="{Binding ResetRisingCurveViewCommand}" />
<Button Content="缩放到点位" Width="86" Height="26" Padding="0" Margin="0,0,8,0"
Command="{Binding ZoomRisingCurveToMarksCommand}" />
<Button Content="放大" Width="64" Height="26" Padding="0"
Command="{Binding OpenPopupCommand}"
CommandParameter="Rising" />
</StackPanel>
</Grid>
<ctl:CurvePlotControl Curve="{Binding RisingCurve}" IsRising="True" VMax="{Binding VMax}"
ViewStartMs="{Binding RisingViewStartMs}"
ViewEndMs="{Binding RisingViewEndMs}" />
</DockPanel>
</Border>
<Border Style="{StaticResource Card}" Grid.Row="1" Margin="0,6,0,0">
<DockPanel>
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource CardTitle}" Text="关断曲线电压下降10% 阈值)" />
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="起点" VerticalAlignment="Center" Margin="0,0,4,0" />
<TextBox Width="58" Height="26" Margin="0,0,8,0" Padding="4,0"
Text="{Binding FallingViewStartMs, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"
FontFamily="{StaticResource FontMono}" />
<TextBlock Text="终点" VerticalAlignment="Center" Margin="0,0,4,0" />
<TextBox Width="58" Height="26" Margin="0,0,8,0" Padding="4,0"
Text="{Binding FallingViewEndMs, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"
FontFamily="{StaticResource FontMono}" />
<Button Content="默认" Width="54" Height="26" Padding="0" Margin="0,0,8,0"
Command="{Binding ResetFallingCurveViewCommand}" />
<Button Content="缩放到点位" Width="86" Height="26" Padding="0" Margin="0,0,8,0"
Command="{Binding ZoomFallingCurveToMarksCommand}" />
<Button Content="放大" Width="64" Height="26" Padding="0"
Command="{Binding OpenPopupCommand}"
CommandParameter="Falling" />
</StackPanel>
</Grid>
<ctl:CurvePlotControl Curve="{Binding FallingCurve}" IsRising="False" VMax="{Binding VMax}"
ViewStartMs="{Binding FallingViewStartMs}"
ViewEndMs="{Binding FallingViewEndMs}" />
</DockPanel>
</Border>
</Grid>
</Grid>
<!-- 结果表 -->
<Grid Grid.Row="2" Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="576" />
</Grid.ColumnDefinitions>
<Border Style="{StaticResource Card}" Margin="0,0,12,0">
<DockPanel>
<TextBlock DockPanel.Dock="Top" Style="{StaticResource CardTitle}" Text="各通道时间参数" />
<DataGrid ItemsSource="{Binding Rows}"
SelectedItem="{Binding SelectedRow, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Header="通道" Width="70">
<DataGridTextColumn.Binding>
<Binding Path="Channel" StringFormat="CH{0}" />
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="开启(ms)" Width="*">
<DataGridTextColumn.Binding>
<Binding Path="OnTimeMs" Converter="{StaticResource NumberOrDash}" ConverterParameter="F3" />
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource MonoText}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="上升(ms)" Width="*">
<DataGridTextColumn.Binding>
<Binding Path="RiseTimeMs" Converter="{StaticResource NumberOrDash}" ConverterParameter="F3" />
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource MonoText}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="关断(ms)" Width="*">
<DataGridTextColumn.Binding>
<Binding Path="OffTimeMs" Converter="{StaticResource NumberOrDash}" ConverterParameter="F3" />
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource MonoText}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="下降(ms)" Width="*">
<DataGridTextColumn.Binding>
<Binding Path="FallTimeMs" Converter="{StaticResource NumberOrDash}" ConverterParameter="F3" />
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource MonoText}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTemplateColumn Header="结果" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Style="{StaticResource StatusBadge}" Background="{Binding Status, Converter={StaticResource StatusToSoftBrush}}">
<TextBlock Text="{Binding Status, Converter={StaticResource StatusToText}}" Foreground="{Binding Status, Converter={StaticResource StatusToBrush}}" FontSize="{StaticResource FsSmall}" />
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
</Border>
<Border Grid.Column="1" Style="{StaticResource Card}" Padding="14">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource CardTitle}" Text="测试说明" />
<TextBox Grid.Row="1"
Text="{Binding Project.TestFunction.Curve, UpdateSourceTrigger=PropertyChanged}"
AcceptsReturn="True"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto"
Height="Auto"
MinHeight="126"
Padding="8"
VerticalContentAlignment="Top" />
</Grid>
</Border>
</Grid>
</Grid>
</UserControl>