1298 lines
123 KiB
XML
1298 lines
123 KiB
XML
<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>
|