Files
Cardiopulmonarybypasssystems/tmp_MainWindow.xaml
2026-03-26 09:28:12 +08:00

1298 lines
123 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.
<Window x:Class="Cardiopulmonarybypasssystems.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:models="clr-namespace:Cardiopulmonarybypasssystems.Models"
xmlns:converters="clr-namespace:Cardiopulmonarybypasssystems.Converters"
mc:Ignorable="d"
Title="心肺转流检测"
Width="1024"
Height="800"
WindowState="Maximized"
WindowStartupLocation="CenterScreen">
<Window.Resources>
<converters:TrendPointCollectionConverter x:Key="TrendPointCollectionConverter" />
</Window.Resources>
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="12" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0" Padding="14,12" CornerRadius="18" Background="{StaticResource HeroBrush}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel VerticalAlignment="Center">
<TextBlock Text="{Binding PageTitle}"
FontSize="21"
FontWeight="Bold"
Foreground="White"
TextTrimming="CharacterEllipsis" />
<WrapPanel Margin="0,8,0,0">
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,8,6">
<StackPanel>
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="阶段" />
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding CurrentStage}" />
</StackPanel>
</Border>
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,8,6">
<StackPanel>
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="设备" />
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding DeviceStatus}" />
</StackPanel>
</Border>
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,8,6">
<StackPanel>
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="告警" />
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding AlarmSummaryDisplay}" />
</StackPanel>
</Border>
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,8,6">
<StackPanel>
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="待处理" />
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding PendingCount}" />
</StackPanel>
</Border>
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,0,6">
<StackPanel>
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="合格率" />
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding ComplianceDisplay}" />
</StackPanel>
</Border>
</WrapPanel>
<TextBlock Margin="0,4,0,0"
Foreground="#EFFAFC"
FontSize="12"
Text="{Binding LatestAction}"
TextTrimming="CharacterEllipsis" />
</StackPanel>
<StackPanel Grid.Column="1" Margin="16,0,0,0" VerticalAlignment="Center">
<WrapPanel HorizontalAlignment="Right">
<Button MinWidth="92" MinHeight="36" Padding="12,7" Margin="0,0,8,8" Command="{Binding ToggleAcquisitionCommand}" Content="采集" Background="#FFFFFFFF" Foreground="{StaticResource HeaderBrush}" />
<Button MinWidth="92" MinHeight="36" Padding="12,7" Margin="0,0,8,8" Command="{Binding AcknowledgeAlarmCommand}" Content="消警" Background="#33FFFFFF" />
<Button MinWidth="108" MinHeight="36" Padding="12,7" Margin="0,0,8,8" Command="{Binding CompleteDetectionCommand}" Content="完成检测" Background="#FFF0B145" />
<Button MinWidth="136" MinHeight="36" Padding="12,7" Margin="0,0,0,8" Command="{Binding ExportReportCommand}" Content="导出检查报告" Background="#FFEA7E3C" />
</WrapPanel>
<TextBlock HorizontalAlignment="Right"
Foreground="#EFFAFC"
FontSize="12"
Text="{Binding ExportStateText}"
TextWrapping="Wrap" />
</StackPanel>
</Grid>
</Border>
<Grid Grid.Row="2">
<Border Style="{StaticResource CardBorderStyle}" Margin="0">
<TabControl>
<TabItem Header="项目检测">
<ScrollViewer Margin="0,6,0,0" VerticalScrollBarVisibility="Auto" CanContentScroll="False">
<StackPanel>
<Border Style="{StaticResource CardBorderStyle}" Padding="14">
<StackPanel>
<DockPanel LastChildFill="False">
<TextBlock DockPanel.Dock="Left" FontSize="18" FontWeight="Bold" Text="项目检索与采集策略" />
<TextBlock Margin="12,4,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding FilteredItemSummary}" />
</DockPanel>
<Grid Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="180" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
Margin="0,0,8,0"
MinHeight="36"
Text="{Binding ItemSearchText, UpdateSourceTrigger=PropertyChanged}" />
<ComboBox Grid.Column="1"
Margin="0,0,8,0"
MinHeight="36"
ItemsSource="{Binding ItemFilterOptions}"
SelectedItem="{Binding ActiveFilter, Mode=TwoWay}" />
<Button Grid.Column="2"
MinWidth="78"
MinHeight="32"
Padding="10,4"
Margin="0,0,8,0"
Command="{Binding ShowPendingItemsCommand}"
Content="待处理"
Background="#FF6B8791" />
<Button Grid.Column="3"
MinWidth="78"
MinHeight="32"
Padding="10,4"
Margin="0,0,8,0"
Command="{Binding ShowAllItemsCommand}"
Content="全部"
Background="#FF6B8791" />
<Button Grid.Column="4"
MinWidth="68"
MinHeight="32"
Padding="10,4"
Command="{Binding ClearItemSearchCommand}"
Content="清空"
Background="#FF6B8791" />
</Grid>
<UniformGrid Columns="7" Margin="0,8,0,0">
<Border Margin="0,0,6,0" Padding="8" Background="#FFE7F5F3" CornerRadius="10" BorderBrush="#FFD9E9E4" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="实时监控" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding RealtimeMonitorCount}" />
</StackPanel>
</Border>
<Border Margin="0,0,6,0" Padding="8" Background="#FFEAF0FB" CornerRadius="10" BorderBrush="#FFDCE3F2" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="实时+手录" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding RealtimeAssistCount}" />
</StackPanel>
</Border>
<Border Margin="0,0,6,0" Padding="8" Background="#FFFDF0E5" CornerRadius="10" BorderBrush="#FFF0E0C8" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="手动录入" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding ManualEntryCount}" />
</StackPanel>
</Border>
<Border Margin="0,0,6,0" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="当前范围" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding FilteredItemSummary}" />
</StackPanel>
</Border>
<Border Margin="0,0,6,0" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="合格项" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding QualifiedCount}" />
</StackPanel>
</Border>
<Border Margin="0,0,6,0" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="预警/不合格" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding WarningCount}" />
</StackPanel>
</Border>
<Border Margin="0,0,0,0" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="待处理" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding PendingCount}" />
</StackPanel>
</Border>
</UniformGrid>
<TextBlock Margin="0,8,0,0"
FontSize="13"
Foreground="{StaticResource WarningBrush}"
Text="未匹配到项目。">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasFilteredItems}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</Border>
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="项目清单" />
<DataGrid Margin="0,4,0,0"
ItemsSource="{Binding FilteredItemsView}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
CanUserSortColumns="False"
IsReadOnly="True"
CanUserAddRows="False"
CanUserDeleteRows="False"
SelectionMode="Single"
SelectionUnit="FullRow"
Height="280"
ScrollViewer.VerticalScrollBarVisibility="Auto"
VirtualizingPanel.ScrollUnit="Pixel">
<DataGrid.Columns>
<DataGridTextColumn Header="项目" Binding="{Binding Item}" Width="180" />
<DataGridTemplateColumn Header="采集方式" Width="170">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Margin="0,4" Padding="10,4" Background="{Binding CaptureModeBadgeBackground}" CornerRadius="999">
<TextBlock HorizontalAlignment="Center" Foreground="{Binding CaptureModeBadgeForeground}" FontWeight="Bold" Text="{Binding CaptureModeText}" />
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="当前状态" Width="96">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Margin="0,4" Padding="10,4" Background="{Binding StatusBadgeBackground}" CornerRadius="999">
<TextBlock HorizontalAlignment="Center" Foreground="{Binding StatusBadgeForeground}" FontWeight="Bold" Text="{Binding StatusText}" />
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="完成情况" Width="130">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Margin="0,2">
<TextBlock FontWeight="Bold" Text="{Binding CompletionText}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="{Binding CompletionHint}" TextWrapping="Wrap" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="结果/说明" Binding="{Binding Measured}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="当前选择摘要" />
<UniformGrid Columns="4" Margin="0,2,0,0">
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="当前项目" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding SelectedItemTitle}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="采集方式" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding SelectedItemCaptureModeText}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="状态" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding SelectedItemStatusText}" />
<TextBlock Margin="0,6,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding SelectedItem.CompletionHint}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,0,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="记录时间" />
<TextBlock FontSize="16" FontWeight="Bold" Text="{Binding SelectedItem.RecordedAtText}" TextWrapping="Wrap" />
</StackPanel>
</Border>
</UniformGrid>
</StackPanel>
</Border>
<Border Style="{StaticResource CardBorderStyle}" Margin="0">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="项目详情与结果填写" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.12*" />
<ColumnDefinition Width="16" />
<ColumnDefinition Width="0.88*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Style="{StaticResource CaptionStyle}" Text="类别" />
<TextBlock FontSize="16" FontWeight="SemiBold" Margin="0,0,0,10" Text="{Binding SelectedItem.Category}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="判定要求" />
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.AcceptanceCriteria}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="检测方法" />
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.TestMethod}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="记录要点" />
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.RecordFocus}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="数据来源" />
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItemMeasurementSource}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="实时数据预览" />
<Border Padding="12" Background="#FFF4F8FA" CornerRadius="14" Margin="0,0,0,10">
<StackPanel>
<TextBlock FontSize="16" FontWeight="SemiBold" Text="{Binding SelectedItemLiveDisplay}" TextWrapping="Wrap" />
<TextBlock Margin="0,6,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding SelectedItemLiveHint}" TextWrapping="Wrap" />
</StackPanel>
</Border>
</StackPanel>
<StackPanel Grid.Column="2">
<TextBlock Style="{StaticResource CaptionStyle}" Text="填写说明" />
<TextBlock Margin="0,0,0,6" Foreground="{StaticResource MutedTextBrush}" FontSize="13" Text="{Binding RealtimeMeasurementHint}" TextWrapping="Wrap" />
<Border Margin="0,0,0,8" Padding="12" Background="#FFF8F4EA" CornerRadius="14">
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsPressureDropSelected}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Style="{StaticResource CaptionStyle}" Text="压力降三点采样" />
<TextBlock FontSize="13" Text="{Binding PressureDropFlowPointDisplay}" TextWrapping="Wrap" />
<WrapPanel Margin="0,6,0,0">
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="声明限值 mmHg" />
<TextBox Width="58" Margin="8,0,0,0" Text="{Binding PressureDropLimit50, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Width="58" Margin="8,0,0,0" Text="{Binding PressureDropLimit75, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Width="58" Margin="8,0,0,0" Text="{Binding PressureDropLimit100, UpdateSourceTrigger=PropertyChanged}" />
</WrapPanel>
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding PressureDropLimitDisplay}" TextWrapping="Wrap" />
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding PressureDropSamplingSummary}" TextWrapping="Wrap" />
<WrapPanel Margin="0,8,0,0">
<Button Command="{Binding CapturePressureDrop50Command}" Content="采集 50%" Background="#FF4D8C72" />
<Button Command="{Binding CapturePressureDrop75Command}" Content="采集 75%" Background="#FF4D8C72" />
<Button Command="{Binding CapturePressureDrop100Command}" Content="采集 100%" Background="#FF4D8C72" />
</WrapPanel>
<DataGrid Margin="0,8,0,0"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
HeadersVisibility="Column"
ItemsSource="{Binding PressureDropEntries}">
<DataGrid.Columns>
<DataGridTextColumn Header="流量点" Binding="{Binding Label}" IsReadOnly="True" Width="55" />
<DataGridTextColumn Header="目标 L/min" Binding="{Binding TargetFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="86" />
<DataGridTextColumn Header="实际主泵" Binding="{Binding ActualPumpFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="82" />
<DataGridTextColumn Header="近端" Binding="{Binding ProximalPressure, StringFormat={}{0:F1}}" IsReadOnly="True" Width="70" />
<DataGridTextColumn Header="远端" Binding="{Binding DistalPressure, StringFormat={}{0:F1}}" IsReadOnly="True" Width="70" />
<DataGridTextColumn Header="ΔP" Binding="{Binding DeltaPressureText}" IsReadOnly="True" Width="65" />
<DataGridTextColumn Header="采样时间" Binding="{Binding SampledAtText}" IsReadOnly="True" Width="78" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Padding="12" Background="#FFF3F7EF" CornerRadius="14">
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsKinkResistanceSelected}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Style="{StaticResource CaptionStyle}" Text="抗扭结标准采样" />
<TextBlock FontSize="13" Text="{Binding KinkResistanceFlowPointDisplay}" TextWrapping="Wrap" />
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding KinkResistanceMandrelDiameterDisplay}" TextWrapping="Wrap" />
<WrapPanel Margin="0,6,0,0">
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="最小流量 L/min" />
<TextBox Width="64" Margin="8,0,0,0" Text="{Binding KinkResistanceMinimumFlow, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Margin="12,0,0,0" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="外径 mm" />
<TextBox Width="64" Margin="8,0,0,0" Text="{Binding KinkResistanceOuterDiameter, UpdateSourceTrigger=PropertyChanged}" />
</WrapPanel>
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding KinkResistanceSamplingSummary}" TextWrapping="Wrap" />
<WrapPanel Margin="0,8,0,0">
<Button Command="{Binding CaptureKinkResistanceMaxBaselineCommand}" Content="采集最大 L0" Background="#FF4D8C72" />
<Button Command="{Binding CaptureKinkResistanceMaxKinkedCommand}" Content="采集最大 L1" Background="#FF7DA65A" />
<Button Command="{Binding CaptureKinkResistanceMinBaselineCommand}" Content="采集最小 L0" Background="#FF4D8C72" />
<Button Command="{Binding CaptureKinkResistanceMinKinkedCommand}" Content="采集最小 L1" Background="#FF7DA65A" />
</WrapPanel>
<DataGrid Margin="0,8,0,0"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
HeadersVisibility="Column"
ItemsSource="{Binding KinkResistanceEntries}">
<DataGrid.Columns>
<DataGridTextColumn Header="流量点" Binding="{Binding Label}" IsReadOnly="True" Width="74" />
<DataGridTextColumn Header="目标 L/min" Binding="{Binding TargetFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="84" />
<DataGridTextColumn Header="L0" Binding="{Binding BaselineFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="68" />
<DataGridTextColumn Header="L1" Binding="{Binding KinkedFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="68" />
<DataGridTextColumn Header="降幅" Binding="{Binding FlowDropRateText}" IsReadOnly="True" Width="70" />
<DataGridTextColumn Header="L0时间" Binding="{Binding BaselineCapturedAtText}" IsReadOnly="True" Width="76" />
<DataGridTextColumn Header="L1时间" Binding="{Binding KinkedCapturedAtText}" IsReadOnly="True" Width="76" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Padding="12" Background="#FFF8F4EA" CornerRadius="14">
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsAntiCollapseSelected}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Style="{StaticResource CaptionStyle}" Text="抗塌陷快速采样" />
<WrapPanel Margin="0,6,0,0">
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="允许增幅 %" />
<TextBox Width="64" Margin="8,0,0,0" Text="{Binding AntiCollapseAllowedIncreaseRate, UpdateSourceTrigger=PropertyChanged}" />
</WrapPanel>
<TextBlock FontSize="13" Text="{Binding AntiCollapseBaselineDisplay}" TextWrapping="Wrap" />
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding AntiCollapseComparisonDisplay}" TextWrapping="Wrap" />
<WrapPanel Margin="0,8,0,0">
<Button Command="{Binding CaptureAntiCollapseBaselineCommand}" Content="采集基线" Background="#FF6B8791" />
<Button Command="{Binding CaptureAntiCollapseComparisonCommand}" Content="采集负压比较" Background="#FFE0A14A" />
</WrapPanel>
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Padding="12" Background="#FFEFF4FB" CornerRadius="14">
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsRecirculationSelected}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Style="{StaticResource CaptionStyle}" Text="再循环标准采样" />
<TextBlock FontSize="13" Text="{Binding RecirculationFlowPointDisplay}" TextWrapping="Wrap" />
<WrapPanel Margin="0,6,0,0">
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="R 限值 %" />
<TextBox Width="64" Margin="8,0,0,0" Text="{Binding RecirculationAllowedLimit, UpdateSourceTrigger=PropertyChanged}" />
</WrapPanel>
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding RecirculationLimitDisplay}" TextWrapping="Wrap" />
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding RecirculationSamplingSummary}" TextWrapping="Wrap" />
<WrapPanel Margin="0,8,0,0">
<Button Command="{Binding CaptureRecirculation50Command}" Content="采集 50%" Background="#FF5F86B3" />
<Button Command="{Binding CaptureRecirculation75Command}" Content="采集 75%" Background="#FF5F86B3" />
<Button Command="{Binding CaptureRecirculation100Command}" Content="采集 100%" Background="#FF5F86B3" />
</WrapPanel>
<DataGrid Margin="0,8,0,0"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
HeadersVisibility="Column"
ItemsSource="{Binding RecirculationEntries}">
<DataGrid.Columns>
<DataGridTextColumn Header="流量点" Binding="{Binding Label}" IsReadOnly="True" Width="55" />
<DataGridTextColumn Header="目标 L/min" Binding="{Binding TargetFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="86" />
<DataGridTextColumn Header="实际主泵" Binding="{Binding ActualPumpFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="82" />
<DataGridTextColumn Header="C1(D)" Binding="{Binding ConcentrationC1, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F0}}" Width="70" />
<DataGridTextColumn Header="C2(C)" Binding="{Binding ConcentrationC2, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F0}}" Width="70" />
<DataGridTextColumn Header="R%" Binding="{Binding RecirculationResultText}" IsReadOnly="True" Width="65" />
<DataGridTextColumn Header="采样时间" Binding="{Binding SampledAtText}" IsReadOnly="True" Width="78" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Padding="12" Background="#FFF8F1EA" CornerRadius="14">
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsHemolysisSelected}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Style="{StaticResource CaptionStyle}" Text="血细胞破坏记录要点" />
<TextBlock FontSize="13" Text="{Binding HemolysisStandardSummary}" TextWrapping="Wrap" />
<TextBlock Margin="0,6,0,0" FontSize="13" Text="{Binding HemolysisTemplateGuidance}" TextWrapping="Wrap" />
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="试验血液准备" />
<Grid Margin="0,6,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="110" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="血液来源" />
<ComboBox Grid.Column="1" ItemsSource="{Binding HemolysisBloodSourceOptions}" SelectedItem="{Binding HemolysisTestParameters.BloodSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="采血日期" />
<DatePicker Grid.Column="3" SelectedDate="{Binding HemolysisTestParameters.CollectionDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedDateFormat="Short" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="抗凝剂" />
<ComboBox Grid.Row="1" Grid.Column="1" Margin="0,8,0,0" ItemsSource="{Binding HemolysisAnticoagulantOptions}" SelectedItem="{Binding HemolysisTestParameters.Anticoagulant, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="初始 Hct" />
<TextBox Grid.Row="1" Grid.Column="3" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.InitialHematocrit, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="调整后 Hct" />
<TextBox Grid.Row="2" Grid.Column="1" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.AdjustedHematocrit, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="葡萄糖 mmol/L" />
<TextBox Grid.Row="2" Grid.Column="3" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.Glucose, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="3" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="血红蛋白 g/dL" />
<TextBox Grid.Row="3" Grid.Column="1" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.TotalHemoglobin, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="3" Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="初始游离Hb" />
<TextBox Grid.Row="3" Grid.Column="3" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.InitialFreeHemoglobin, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="测试回路与运行条件" />
<Grid Margin="0,6,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="110" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="充盈量 mL" />
<TextBox Grid.Column="1" Text="{Binding HemolysisTestParameters.CircuitPrimingVolume, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="容积差 %" />
<TextBox Grid.Column="3" Text="{Binding HemolysisTestParameters.CircuitVolumeDifference, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="设定流量 L/min" />
<TextBox Grid.Row="1" Grid.Column="1" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.SetFlow, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="运行时间 min" />
<TextBox Grid.Row="1" Grid.Column="3" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.RunTimeMinutes, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="目标温度 ℃" />
<TextBox Grid.Row="2" Grid.Column="1" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.TargetTemperature, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="自动计算摘要" />
<TextBlock FontSize="13" Text="{Binding HemolysisSamplingCompletionSummary}" TextWrapping="Wrap" />
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding HemolysisCalculationSummary}" TextWrapping="Wrap" />
<Border Margin="0,8,0,0" Padding="10" Background="#FFFBE8E6" CornerRadius="12" BorderBrush="#FFF0C6C1" BorderThickness="1">
<TextBlock Foreground="{StaticResource DangerBrush}" FontSize="13" FontWeight="SemiBold" Text="{Binding HemolysisRequiredPointAlert}" TextWrapping="Wrap">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HemolysisHasMissingRequiredPoints}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Border>
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="试验运行与取样记录" />
<DataGrid Margin="0,6,0,0"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
HeadersVisibility="Column"
ItemsSource="{Binding HemolysisSamplingEntries}"
MinHeight="260">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsRequiredPoint}" Value="True">
<Setter Property="Background" Value="#FFFDF5DE" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsRequiredPoint}" Value="True" />
<Condition Binding="{Binding HasRequiredData}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="#FFE3F6EF" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="序号" Binding="{Binding Sequence}" IsReadOnly="True" Width="45" />
<DataGridTextColumn Header="时间点" Binding="{Binding TimePoint}" IsReadOnly="True" Width="88" />
<DataGridTextColumn Header="挂钟时间" Binding="{Binding ClockTime, UpdateSourceTrigger=PropertyChanged}" Width="80" />
<DataGridTextColumn Header="游离Hb" Binding="{Binding FreeHemoglobin, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="82" />
<DataGridTextColumn Header="Hct" Binding="{Binding Hematocrit, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F2}}" Width="62" />
<DataGridTextColumn Header="白细胞" Binding="{Binding WhiteCellCount, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="78" />
<DataGridTextColumn Header="血小板" Binding="{Binding PlateletCount, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="78" />
<DataGridTextColumn Header="Hb g/dL" Binding="{Binding Hemoglobin, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="76" />
<DataGridTextColumn Header="流量 L/min" Binding="{Binding Flow, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F2}}" Width="84" />
<DataGridTextColumn Header="压力 mmHg" Binding="{Binding Pressure, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F0}}" Width="84" />
<DataGridTextColumn Header="温度 ℃" Binding="{Binding Temperature, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="76" />
<DataGridTextColumn Header="备注" Binding="{Binding Remarks, UpdateSourceTrigger=PropertyChanged}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
<TextBlock Style="{StaticResource CaptionStyle}" Text="结果记录" />
<Border Style="{StaticResource FieldPanelStyle}">
<TextBox Margin="0"
Text="{Binding ResultValue, UpdateSourceTrigger=PropertyChanged}"
MinHeight="136"
AcceptsReturn="True"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto"
IsReadOnly="{Binding SelectedItemUsesRealtimeValue}" />
</Border>
<Border Style="{StaticResource FieldPanelStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="12" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource CaptionStyle}" Text="判定" />
<ComboBox Grid.Row="1" ItemsSource="{Binding ResultStatusOptions}" SelectedItem="{Binding SelectedResultStatusText, Mode=TwoWay}" />
<TextBlock Grid.Column="2" Style="{StaticResource CaptionStyle}" Text="记录人" />
<TextBox Grid.Row="1" Grid.Column="2" Text="{Binding ResultOperator, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="2" Style="{StaticResource CaptionStyle}" Text="复核人" />
<TextBox Grid.Row="3" Text="{Binding ReviewerName, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="2" Grid.Column="2" Style="{StaticResource CaptionStyle}" Text="批准人" />
<TextBox Grid.Row="3" Grid.Column="2" Text="{Binding ApproverName, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Border>
<TextBlock Style="{StaticResource CaptionStyle}" Text="复核备注" />
<Border Style="{StaticResource FieldPanelStyle}">
<TextBox Margin="0"
Text="{Binding ResultNote, UpdateSourceTrigger=PropertyChanged}"
MinHeight="120"
AcceptsReturn="True"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto"
IsReadOnly="{Binding SelectedItemUsesRealtimeValue}" />
</Border>
</StackPanel>
</Grid>
<DockPanel Margin="0,8,0,0" LastChildFill="False">
<TextBlock DockPanel.Dock="Left" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="{Binding LatestAction}" TextWrapping="Wrap" Width="460" />
<WrapPanel DockPanel.Dock="Right">
<Button Command="{Binding SelectPreviousItemCommand}" Content="上一项" Background="#FF6B8791" />
<Button Command="{Binding SelectNextItemCommand}" Content="下一项" Background="#FF6B8791" />
<Button Command="{Binding ApplyResultCommand}" Content="保存并更新状态" Background="#FF2B8F6A" />
</WrapPanel>
</DockPanel>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<TabItem Header="实时数据">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="0,6,0,0">
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="运行健康概览" />
<UniformGrid Columns="3" Margin="0,4,0,0">
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="PLC 状态" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding DeviceStatus}" />
<TextBlock Margin="0,4,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding TelemetryStatusDetail}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="PLC 端点" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="18" Text="{Binding PlcEndpointDisplay}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="最后采样" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="18" Text="{Binding TelemetryLastUpdatedDisplay}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="信号覆盖" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding TelemetryAvailabilityDisplay}" />
</StackPanel>
</Border>
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="实时告警" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding AlarmSummaryDisplay}" />
</StackPanel>
</Border>
<Border Margin="0,0,0,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="主/回流偏差" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding FlowImbalanceDisplay}" />
</StackPanel>
</Border>
</UniformGrid>
<Border Margin="0,12,0,0" Padding="14" Background="#FFF5F8E9" CornerRadius="14" BorderBrush="#FFD9E2B3" BorderThickness="1">
<StackPanel>
<TextBlock FontSize="15" FontWeight="Bold" Foreground="{StaticResource HeaderBrush}" Text="信号说明" />
<TextBlock Margin="0,4,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding TelemetryCoverageDisplay}" TextWrapping="Wrap" />
</StackPanel>
</Border>
</StackPanel>
</Border>
<Border Style="{StaticResource CardBorderStyle}" Padding="14">
<Border.Resources>
<DataTemplate x:Key="PumpControlCardTemplate" DataType="{x:Type models:PumpControlChannel}">
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF4F8FA" CornerRadius="10" BorderBrush="#FFD9E5E8" BorderThickness="1">
<StackPanel>
<DockPanel>
<Ellipse Width="9" Height="9" Margin="0,3,5,0" Fill="{Binding IndicatorColor}" DockPanel.Dock="Left" />
<TextBlock FontSize="12" FontWeight="SemiBold" Text="{Binding Name}" TextWrapping="Wrap" />
</DockPanel>
<TextBlock Margin="0,5,0,0" Style="{StaticResource MetricValueStyle}" FontSize="16" Text="{Binding FlowDisplay}" TextTrimming="CharacterEllipsis" />
<TextBlock Margin="0,2,0,0" FontSize="11" FontWeight="Bold" Foreground="{StaticResource HeaderBrush}" Text="{Binding StateText}" />
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="{Binding StateHint}" TextWrapping="Wrap" />
<Button Margin="0,6,0,0"
MinWidth="0"
MinHeight="28"
Padding="8,3"
Command="{Binding DataContext.TogglePumpControlCommand, RelativeSource={RelativeSource AncestorType=Window}}"
CommandParameter="{Binding}"
Content="{Binding ActionText}"
Background="#FF4D8C72" />
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate x:Key="ValveControlCardTemplate" DataType="{x:Type models:ValveControlChannel}">
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF4F8FA" CornerRadius="10" BorderBrush="#FFD9E5E8" BorderThickness="1">
<StackPanel>
<DockPanel>
<Ellipse Width="9" Height="9" Margin="0,3,5,0" Fill="{Binding IndicatorColor}" DockPanel.Dock="Left" />
<TextBlock FontSize="12" FontWeight="SemiBold" Text="{Binding Name}" TextWrapping="Wrap" />
</DockPanel>
<TextBlock Margin="0,6,0,0" Style="{StaticResource MetricValueStyle}" FontSize="16" Text="{Binding StateText}" />
<TextBlock Margin="0,2,0,0" Style="{StaticResource CaptionStyle}" FontSize="11" Text="{Binding StateHint}" TextWrapping="Wrap" />
<Button Margin="0,6,0,0"
MinWidth="0"
MinHeight="28"
Padding="8,3"
Command="{Binding DataContext.ToggleValveControlCommand, RelativeSource={RelativeSource AncestorType=Window}}"
CommandParameter="{Binding}"
Content="{Binding ActionText}"
Background="#FF4D8C72" />
</StackPanel>
</Border>
</DataTemplate>
</Border.Resources>
<StackPanel>
<TextBlock FontSize="18" FontWeight="Bold" Text="泵控 / 阀控" />
<UniformGrid Columns="2" Margin="0,6,0,0">
<Border Margin="0,0,6,6" Padding="10" Background="#FFF7FBFC" CornerRadius="12" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock FontSize="14" FontWeight="Bold" Text="压力降 / 抗塌陷" />
<ItemsControl Margin="0,6,0,0" ItemsSource="{Binding PressureDropPumpControls}" ItemTemplate="{StaticResource PumpControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Margin="0,0,0,6" Padding="10" Background="#FFF7FBFC" CornerRadius="12" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock FontSize="14" FontWeight="Bold" Text="再循环" />
<ItemsControl Margin="0,6,0,0" ItemsSource="{Binding RecirculationPumpControls}" ItemTemplate="{StaticResource PumpControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Margin="0,0,6,6" Padding="10" Background="#FFF7FBFC" CornerRadius="12" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock FontSize="14" FontWeight="Bold" Text="抗扭结" />
<ItemsControl Margin="0,6,0,0" ItemsSource="{Binding KinkResistancePumpControls}" ItemTemplate="{StaticResource PumpControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Margin="0,0,0,6" Padding="10" Background="#FFF7FBFC" CornerRadius="12" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock FontSize="14" FontWeight="Bold" Text="血细胞破坏" />
<ItemsControl Margin="0,6,0,0" ItemsSource="{Binding HemolysisPumpControls}" ItemTemplate="{StaticResource PumpControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Margin="0,0,0,0" Padding="10" Background="#FFF7FBFC" CornerRadius="12" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock FontSize="14" FontWeight="Bold" Text="测试回路阀" />
<ItemsControl Margin="0,6,0,0" ItemsSource="{Binding ValveControls}" ItemTemplate="{StaticResource ValveControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Margin="0,0,0,0" Padding="10" Background="#FFF7FBFC" CornerRadius="12" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock FontSize="14" FontWeight="Bold" Text="控制说明" />
<TextBlock Margin="0,6,0,0" Style="{StaticResource CaptionStyle}" FontSize="11" Text="泵和阀控制已合并显示。灰色为未确认状态,绿色为运行/开启,黄色为启动中。" TextWrapping="Wrap" />
</StackPanel>
</Border>
</UniformGrid>
</StackPanel>
</Border>
<Border Style="{StaticResource CardBorderStyle}" Padding="14">
<StackPanel>
<TextBlock FontSize="18" FontWeight="Bold" Text="关键实时读数(未接入显示 --" />
<WrapPanel Margin="0,6,0,0">
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="阶段" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding CurrentStage}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="设备状态" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding DeviceStatus}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="近端压力" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding ProximalPressureDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="远端压力" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding DistalPressureDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="压力降/抗塌陷" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding PressureDropPumpFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="再循环主泵" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding RecirculationPumpFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="回流泵" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding ReturnFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="引流泵" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding DrainageFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="抗扭结" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding KinkResistancePumpFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="血细胞破坏单腔" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding HemolysisDrainageSingleFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="双腔试验回路" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding HemolysisReturnSingleFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="双腔回路双管腔" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding HemolysisDualLumenFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="负压辅助" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding NegativeAssistPressureDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="压力降 ΔP" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding DeltaPressureDisplay}" />
</StackPanel>
</Border>
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="再循环率" />
<TextBlock FontSize="14" FontWeight="Bold" Text="{Binding RealtimeRecirculationDisplay}" />
</StackPanel>
</Border>
</WrapPanel>
<DockPanel Margin="0,12,0,8">
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="趋势图" />
<Button DockPanel.Dock="Right"
MinWidth="96"
Command="{Binding ClearTrendDataCommand}"
Content="清空曲线"
Background="#FF6B8791" />
</DockPanel>
<Grid Margin="0,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="12" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="压力/ΔP 趋势" />
<TextBlock Margin="0,0,0,8" Style="{StaticResource CaptionStyle}" Text="{Binding PressureTrendCurrentSummary}" TextWrapping="Wrap" />
<WrapPanel Margin="0,0,0,8">
<Border Width="12" Height="12" Margin="0,2,6,0" Background="#FF0B7A75" CornerRadius="6" />
<TextBlock Margin="0,0,12,0" Style="{StaticResource CaptionStyle}" Text="近端压力" />
<Border Width="12" Height="12" Margin="0,2,6,0" Background="#FF3C6FB6" CornerRadius="6" />
<TextBlock Margin="0,0,12,0" Style="{StaticResource CaptionStyle}" Text="远端压力" />
<Border Width="12" Height="12" Margin="0,2,6,0" Background="#FFD38A16" CornerRadius="6" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="ΔP" />
</WrapPanel>
<Grid Height="180" Background="#FFF7FBFC">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#FFE0EAEE" BorderThickness="0,0,0,1" />
<Border Grid.Row="1" BorderBrush="#FFE0EAEE" BorderThickness="0,0,0,1" />
<Border Grid.Row="2" BorderBrush="#FFE0EAEE" BorderThickness="0,0,0,1" />
<Canvas>
<Polyline Stroke="#FF0B7A75" StrokeThickness="2">
<Polyline.Points>
<MultiBinding Converter="{StaticResource TrendPointCollectionConverter}">
<Binding Path="ProximalPressureTrendValues" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualHeight" />
<Binding Path="PressureTrendMax" />
</MultiBinding>
</Polyline.Points>
</Polyline>
<Polyline Stroke="#FF3C6FB6" StrokeThickness="2">
<Polyline.Points>
<MultiBinding Converter="{StaticResource TrendPointCollectionConverter}">
<Binding Path="DistalPressureTrendValues" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualHeight" />
<Binding Path="PressureTrendMax" />
</MultiBinding>
</Polyline.Points>
</Polyline>
<Polyline Stroke="#FFD38A16" StrokeThickness="2">
<Polyline.Points>
<MultiBinding Converter="{StaticResource TrendPointCollectionConverter}">
<Binding Path="DeltaPressureTrendValues" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualHeight" />
<Binding Path="PressureTrendMax" />
</MultiBinding>
</Polyline.Points>
</Polyline>
</Canvas>
</Grid>
</StackPanel>
</Border>
<Border Grid.Column="2" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="{Binding FlowTrendTitle}" />
<TextBlock Margin="0,0,0,8" Style="{StaticResource CaptionStyle}" Text="{Binding FlowTrendCurrentSummary}" TextWrapping="Wrap" />
<WrapPanel Margin="0,0,0,8">
<Border Width="12" Height="12" Margin="0,2,6,0" Background="#FF0B7A75" CornerRadius="6" />
<TextBlock Margin="0,0,12,0" Style="{StaticResource CaptionStyle}" Text="{Binding FlowTrendPrimaryLabel}" />
<Border Width="12" Height="12" Margin="0,2,6,0" Background="#FF3C6FB6" CornerRadius="6">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasFlowTrendSecondary}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<TextBlock Margin="0,0,12,0" Text="{Binding FlowTrendSecondaryLabel}">
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource CaptionStyle}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasFlowTrendSecondary}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<Border Width="12" Height="12" Margin="0,2,6,0" Background="#FFD38A16" CornerRadius="6">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasFlowTrendTertiary}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<TextBlock Text="{Binding FlowTrendTertiaryLabel}">
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource CaptionStyle}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasFlowTrendTertiary}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</WrapPanel>
<Grid Height="180" Background="#FFF7FBFC">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#FFE0EAEE" BorderThickness="0,0,0,1" />
<Border Grid.Row="1" BorderBrush="#FFE0EAEE" BorderThickness="0,0,0,1" />
<Border Grid.Row="2" BorderBrush="#FFE0EAEE" BorderThickness="0,0,0,1" />
<Canvas>
<Polyline Stroke="#FF0B7A75" StrokeThickness="2">
<Polyline.Points>
<MultiBinding Converter="{StaticResource TrendPointCollectionConverter}">
<Binding Path="ActiveFlowTrendPrimaryValues" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualHeight" />
<Binding Path="FlowTrendMax" />
</MultiBinding>
</Polyline.Points>
</Polyline>
<Polyline Stroke="#FF3C6FB6" StrokeThickness="2">
<Polyline.Style>
<Style TargetType="Polyline">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasFlowTrendSecondary}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Polyline.Style>
<Polyline.Points>
<MultiBinding Converter="{StaticResource TrendPointCollectionConverter}">
<Binding Path="ActiveFlowTrendSecondaryValues" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualHeight" />
<Binding Path="FlowTrendMax" />
</MultiBinding>
</Polyline.Points>
</Polyline>
<Polyline Stroke="#FFD38A16" StrokeThickness="2">
<Polyline.Style>
<Style TargetType="Polyline">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasFlowTrendTertiary}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Polyline.Style>
<Polyline.Points>
<MultiBinding Converter="{StaticResource TrendPointCollectionConverter}">
<Binding Path="ActiveFlowTrendTertiaryValues" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource AncestorType=Canvas}" Path="ActualHeight" />
<Binding Path="FlowTrendMax" />
</MultiBinding>
</Polyline.Points>
</Polyline>
</Canvas>
</Grid>
</StackPanel>
</Border>
</Grid>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<TabItem Header="配置">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="0,6,0,0">
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="产品与试验配置" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="以下参数会自动保存到本地配置文件,重启后自动恢复。" TextWrapping="Wrap" />
<Grid Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="产品型号" />
<TextBox Grid.Column="1" Text="{Binding ProductModel, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="适用人群" />
<TextBox Grid.Row="1" Grid.Column="1" Margin="0,8,0,0" Text="{Binding ApplicablePopulation, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="标称最大流量 L/min" />
<TextBox Grid.Row="2" Grid.Column="1" Margin="0,8,0,0" Text="{Binding RatedMaxFlow, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<TextBlock Margin="0,10,0,0" FontSize="14" FontWeight="SemiBold" Text="{Binding ConfigurationSummary}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<UniformGrid Columns="3" Margin="0,0,0,12">
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="当前型号" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding ProductModel}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="适用人群" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding ApplicablePopulation}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="标称最大流量" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding RatedMaxFlow, StringFormat={}{0:F2} L/min}" TextWrapping="Wrap" />
</StackPanel>
</Border>
</UniformGrid>
<UniformGrid Columns="2" Margin="0,0,0,12">
<Border Margin="0,0,8,8" Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="压力降限值" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="{Binding PressureDropFlowPointDisplay}" TextWrapping="Wrap" />
<Grid Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="50%" />
<TextBox Grid.Column="1" Text="{Binding PressureDropLimit50, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="75%" />
<TextBox Grid.Row="1" Grid.Column="1" Margin="0,8,0,0" Text="{Binding PressureDropLimit75, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="100%" />
<TextBox Grid.Row="2" Grid.Column="1" Margin="0,8,0,0" Text="{Binding PressureDropLimit100, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding PressureDropLimitDisplay}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="抗塌陷与再循环限值" />
<Grid Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="抗塌陷允许增幅 %" />
<TextBox Grid.Column="1" Text="{Binding AntiCollapseAllowedIncreaseRate, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="再循环 R 限值 %" />
<TextBox Grid.Row="1" Grid.Column="1" Margin="0,8,0,0" Text="{Binding RecirculationAllowedLimit, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding RecirculationLimitDisplay}" TextWrapping="Wrap" />
<TextBlock Margin="0,4,0,0" Style="{StaticResource CaptionStyle}" Text="抗塌陷判定规则:负压后压力降增幅不超过该限值。" TextWrapping="Wrap" />
</StackPanel>
</Border>
</UniformGrid>
</StackPanel>
</ScrollViewer>
</TabItem>
<TabItem Header="追溯">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="0,6,0,0">
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="追溯概览" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="仅保留本地追溯:时间、结果、结束记录和报表导出记录。" TextWrapping="Wrap" />
<UniformGrid Columns="3" Margin="0,12,0,0">
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="追溯记录数" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding TraceEvents.Count}" />
</StackPanel>
</Border>
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="合格项" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding QualifiedCount}" />
</StackPanel>
</Border>
<Border Margin="0,0,0,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="待处理项" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding PendingCount}" />
</StackPanel>
</Border>
</UniformGrid>
</StackPanel>
</Border>
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="操作记录" />
<DataGrid ItemsSource="{Binding TraceEvents}" IsReadOnly="True" MinHeight="420">
<DataGrid.Columns>
<DataGridTextColumn Header="时间" Binding="{Binding Timestamp, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}" Width="180" />
<DataGridTextColumn Header="阶段" Binding="{Binding Stage}" Width="110" />
<DataGridTextColumn Header="详情" Binding="{Binding Detail}" Width="*" />
<DataGridTextColumn Header="操作员" Binding="{Binding Operator}" Width="100" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
</TabControl>
</Border>
</Grid>
</Grid>
</Window>