Files
Cardiopulmonarybypasssystems/Cardiopulmonarybypasssystems/MainWindow.xaml
GukSang.Jin 70c478409a 更新
2026-03-13 19:23:22 +08:00

922 lines
88 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="&#x5FC3;&#x80BA;&#x8F6C;&#x6D41;&#x68C0;&#x6D4B;"
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="18" CornerRadius="22" Background="{StaticResource HeroBrush}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel>
<TextBlock Text="{Binding PageTitle}" FontSize="28" FontWeight="Bold" Foreground="White" TextWrapping="Wrap" />
<TextBlock Margin="0,8,0,0" Foreground="#EFFAFC" FontSize="15" TextWrapping="Wrap"
Text="&#x518D;&#x5FAA;&#x73AF;&#x7387;&#x7531;&#x5B9E;&#x65F6;&#x6D41;&#x91CF;&#x4F20;&#x611F;&#x5668;&#x8BA1;&#x7B97;&#xFF0C;&#x5176;&#x4ED6;&#x7ED3;&#x679C;&#x7531;&#x4EBA;&#x5DE5;&#x586B;&#x5199;&#xFF0C;&#x68C0;&#x6D4B;&#x5B8C;&#x6210;&#x540E;&#x5BFC;&#x51FA;&#x62A5;&#x8868;&#x3002;" />
</StackPanel>
<StackPanel Grid.Row="1" Margin="0,12,0,0">
<WrapPanel>
<Button Command="{Binding ToggleAcquisitionCommand}" Content="&#x91C7;&#x96C6;" Background="#FFFFFFFF" Foreground="{StaticResource HeaderBrush}" />
<Button Command="{Binding AcknowledgeAlarmCommand}" Content="&#x6D88;&#x8B66;" Background="#33FFFFFF" />
<Button Command="{Binding CompleteDetectionCommand}" Content="&#x5B8C;&#x6210;&#x68C0;&#x6D4B;" Background="#FFF0B145" />
<Button Command="{Binding ExportReportCommand}" Content="&#x5BFC;&#x51FA; PDF" Background="#FFEA7E3C" />
</WrapPanel>
<TextBlock Margin="0,2,0,0" Foreground="#EFFAFC" FontSize="14" Text="{Binding ExportStateText}" TextWrapping="Wrap" />
<TextBlock Margin="0,6,0,0" Foreground="#EFFAFC" FontSize="14" Text="{Binding LatestAction}" TextWrapping="Wrap" />
</StackPanel>
</Grid>
</Border>
<Grid Grid.Row="2">
<Border Style="{StaticResource CardBorderStyle}" Margin="0">
<TabControl>
<TabItem Header="&#x9879;&#x76EE;&#x68C0;&#x6D4B;">
<ScrollViewer Margin="0,6,0,0" VerticalScrollBarVisibility="Auto" CanContentScroll="False">
<StackPanel>
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="&#x9879;&#x76EE;&#x68C0;&#x7D22;&#x4E0E;&#x91C7;&#x96C6;&#x7B56;&#x7565;" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x6839;&#x636E; YY 0948-2025 &#x5C06;&#x9879;&#x76EE;&#x533A;&#x5206;&#x4E3A;&#x201C;&#x5B9E;&#x65F6;&#x76D1;&#x63A7;&#x201D;&#x201C;&#x5B9E;&#x65F6;&#x663E;&#x793A;+&#x624B;&#x52A8;&#x5F55;&#x5165;&#x201D;&#x548C;&#x201C;&#x624B;&#x52A8;&#x5F55;&#x5165;&#x201D;&#x4E09;&#x7C7B;&#x3002;" TextWrapping="Wrap" />
<Grid Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Margin="0" MinHeight="40" Text="{Binding ItemSearchText, UpdateSourceTrigger=PropertyChanged}" />
<Button Grid.Column="1" Margin="8,0,0,0" MinWidth="90" Padding="14,8" Command="{Binding ClearItemSearchCommand}" Content="&#x6E05;&#x7A7A;" Background="#FF6B8791" />
</Grid>
<Grid Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="220" />
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="&#x5FEB;&#x901F;&#x7B5B;&#x9009;" />
<ComboBox Grid.Column="1"
Margin="12,0,0,8"
ItemsSource="{Binding ItemFilterOptions}"
SelectedItem="{Binding ActiveFilter, Mode=TwoWay}" />
</Grid>
<TextBlock Margin="0,8,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding FilteredItemSummary}" />
<TextBlock Margin="0,8,0,0" FontSize="14" Foreground="{StaticResource WarningBrush}" Text="&#x672A;&#x5339;&#x914D;&#x5230;&#x9879;&#x76EE;&#x3002;">
<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>
<UniformGrid Columns="3" Margin="0,0,0,12">
<Border Margin="0,0,8,8" Padding="14" Background="#FFE7F5F3" CornerRadius="14">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x5B9E;&#x65F6;&#x76D1;&#x63A7;" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="26" Text="{Binding RealtimeMonitorCount}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x538B;&#x529B;&#x964D;&#x3001;&#x518D;&#x5FAA;&#x73AF;&#x81EA;&#x52A8;&#x540C;&#x6B65;" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,8,8" Padding="14" Background="#FFEAF0FB" CornerRadius="14">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x5B9E;&#x65F6;&#x663E;&#x793A;+&#x624B;&#x52A8;&#x5F55;&#x5165;" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="26" Text="{Binding RealtimeAssistCount}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x6297;&#x584C;&#x9677;&#x3001;&#x8840;&#x6DB2;&#x76F8;&#x5173;&#x6307;&#x6807;&#x7528;&#x4E8E;&#x8F85;&#x52A9;&#x5224;&#x5B9A;" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Padding="14" Background="#FFFDF0E5" CornerRadius="14">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x624B;&#x52A8;&#x5F55;&#x5165;" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="26" Text="{Binding ManualEntryCount}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x751F;&#x7269;&#x3001;&#x5316;&#x5B66;&#x3001;&#x6B8B;&#x7559;&#x3001;&#x6E05;&#x6D01;&#x5EA6;&#x7B49;&#x6309;&#x539F;&#x59CB;&#x8BB0;&#x5F55;&#x624B;&#x586B;" TextWrapping="Wrap" />
</StackPanel>
</Border>
</UniformGrid>
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="&#x9879;&#x76EE;&#x6E05;&#x5355;" />
<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="&#x9879;&#x76EE;" Binding="{Binding Item}" Width="180" />
<DataGridTemplateColumn Header="&#x91C7;&#x96C6;&#x65B9;&#x5F0F;" 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>
<DataGridTextColumn Header="&#x5F53;&#x524D;&#x72B6;&#x6001;" Binding="{Binding StatusText}" Width="90" />
<DataGridTemplateColumn Header="&#x5B8C;&#x6210;&#x60C5;&#x51B5;" 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="&#x7ED3;&#x679C;/&#x8BF4;&#x660E;" Binding="{Binding Measured}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
<UniformGrid Columns="4" Margin="0,0,0,12">
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x5F53;&#x524D;&#x9879;&#x76EE;" />
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding SelectedItemTitle}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x91C7;&#x96C6;&#x65B9;&#x5F0F;" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding SelectedItemCaptureModeText}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x72B6;&#x6001;" />
<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,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x8BB0;&#x5F55;&#x65F6;&#x95F4;" />
<TextBlock FontSize="16" FontWeight="Bold" Text="{Binding SelectedItem.RecordedAtText}" TextWrapping="Wrap" />
</StackPanel>
</Border>
</UniformGrid>
<Border Style="{StaticResource CardBorderStyle}" Margin="0">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="&#x9879;&#x76EE;&#x8BE6;&#x60C5;&#x4E0E;&#x7ED3;&#x679C;&#x586B;&#x5199;" />
<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="&#x7C7B;&#x522B;" />
<TextBlock FontSize="16" FontWeight="SemiBold" Margin="0,0,0,10" Text="{Binding SelectedItem.Category}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x5224;&#x5B9A;&#x8981;&#x6C42;" />
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.AcceptanceCriteria}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x68C0;&#x6D4B;&#x65B9;&#x6CD5;" />
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.TestMethod}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x8BB0;&#x5F55;&#x8981;&#x70B9;" />
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.RecordFocus}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x6570;&#x636E;&#x6765;&#x6E90;" />
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItemMeasurementSource}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x5B9E;&#x65F6;&#x6570;&#x636E;&#x9884;&#x89C8;" />
<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="&#x586B;&#x5199;&#x8BF4;&#x660E;" />
<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="&#x538B;&#x529B;&#x964D;&#x4E09;&#x70B9;&#x91C7;&#x6837;" />
<TextBlock FontSize="13" Text="{Binding PressureDropFlowPointDisplay}" TextWrapping="Wrap" />
<WrapPanel Margin="0,6,0,0">
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="&#x58F0;&#x660E;&#x9650;&#x503C; 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="&#x91C7;&#x96C6; 50%" Background="#FF4D8C72" />
<Button Command="{Binding CapturePressureDrop75Command}" Content="&#x91C7;&#x96C6; 75%" Background="#FF4D8C72" />
<Button Command="{Binding CapturePressureDrop100Command}" Content="&#x91C7;&#x96C6; 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="&#x6D41;&#x91CF;&#x70B9;" Binding="{Binding Label}" IsReadOnly="True" Width="55" />
<DataGridTextColumn Header="&#x76EE;&#x6807; L/min" Binding="{Binding TargetFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="86" />
<DataGridTextColumn Header="&#x5B9E;&#x9645;&#x4E3B;&#x6CF5;" Binding="{Binding ActualPumpFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="82" />
<DataGridTextColumn Header="&#x8FD1;&#x7AEF;" Binding="{Binding ProximalPressure, StringFormat={}{0:F1}}" IsReadOnly="True" Width="70" />
<DataGridTextColumn Header="&#x8FDC;&#x7AEF;" Binding="{Binding DistalPressure, StringFormat={}{0:F1}}" IsReadOnly="True" Width="70" />
<DataGridTextColumn Header="&#x0394;P" Binding="{Binding DeltaPressureText}" IsReadOnly="True" Width="65" />
<DataGridTextColumn Header="&#x91C7;&#x6837;&#x65F6;&#x95F4;" 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="&#x6297;&#x584C;&#x9677;&#x5FEB;&#x901F;&#x91C7;&#x6837;" />
<WrapPanel Margin="0,6,0,0">
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="&#x5141;&#x8BB8;&#x589E;&#x5E45; %" />
<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="&#x91C7;&#x96C6;&#x57FA;&#x7EBF;" Background="#FF6B8791" />
<Button Command="{Binding CaptureAntiCollapseComparisonCommand}" Content="&#x91C7;&#x96C6;&#x8D1F;&#x538B;&#x6BD4;&#x8F83;" 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="&#x518D;&#x5FAA;&#x73AF;&#x6807;&#x51C6;&#x91C7;&#x6837;" />
<TextBlock FontSize="13" Text="{Binding RecirculationFlowPointDisplay}" TextWrapping="Wrap" />
<WrapPanel Margin="0,6,0,0">
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="R &#x9650;&#x503C; %" />
<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="&#x91C7;&#x96C6; 50%" Background="#FF5F86B3" />
<Button Command="{Binding CaptureRecirculation75Command}" Content="&#x91C7;&#x96C6; 75%" Background="#FF5F86B3" />
<Button Command="{Binding CaptureRecirculation100Command}" Content="&#x91C7;&#x96C6; 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="&#x6D41;&#x91CF;&#x70B9;" Binding="{Binding Label}" IsReadOnly="True" Width="55" />
<DataGridTextColumn Header="&#x76EE;&#x6807; L/min" Binding="{Binding TargetFlow, StringFormat={}{0:F2}}" IsReadOnly="True" Width="86" />
<DataGridTextColumn Header="&#x5B9E;&#x9645;&#x4E3B;&#x6CF5;" 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="&#x91C7;&#x6837;&#x65F6;&#x95F4;" Binding="{Binding SampledAtText}" IsReadOnly="True" Width="78" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
<TextBox Text="{Binding ResultValue, UpdateSourceTrigger=PropertyChanged}" MinHeight="104" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" IsReadOnly="{Binding SelectedItemUsesRealtimeValue}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x5224;&#x5B9A;" />
<ComboBox ItemsSource="{Binding ResultStatusOptions}" SelectedItem="{Binding SelectedResultStatusText, Mode=TwoWay}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x8BB0;&#x5F55;&#x4EBA;" />
<TextBox Text="{Binding ResultOperator, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x590D;&#x6838;&#x4EBA;" />
<TextBox Text="{Binding ReviewerName, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x6279;&#x51C6;&#x4EBA;" />
<TextBox Text="{Binding ApproverName, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x5907;&#x6CE8;" />
<TextBox Text="{Binding ResultNote, UpdateSourceTrigger=PropertyChanged}" MinHeight="104" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" IsReadOnly="{Binding SelectedItemUsesRealtimeValue}" />
</StackPanel>
</Grid>
<WrapPanel Margin="0,8,0,0">
<Button Command="{Binding SelectPreviousItemCommand}" Content="&#x4E0A;&#x4E00;&#x9879;" Background="#FF6B8791" />
<Button Command="{Binding SelectNextItemCommand}" Content="&#x4E0B;&#x4E00;&#x9879;" Background="#FF6B8791" />
<Button Command="{Binding ApplyResultCommand}" Content="&#x4FDD;&#x5B58;" />
</WrapPanel>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<TabItem Header="&#x5B9E;&#x65F6;&#x6570;&#x636E;">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="0,6,0,0">
<Border Style="{StaticResource CardBorderStyle}">
<Border.Resources>
<DataTemplate x:Key="PumpControlCardTemplate" DataType="{x:Type models:PumpControlChannel}">
<Border Width="220" Margin="0,0,10,10" Padding="14" Background="#FFF4F8FA" CornerRadius="14">
<StackPanel>
<DockPanel>
<Ellipse Width="12" Height="12" Margin="0,3,8,0" Fill="{Binding IndicatorColor}" DockPanel.Dock="Left" />
<TextBlock FontSize="16" FontWeight="SemiBold" Text="{Binding Name}" TextWrapping="Wrap" />
</DockPanel>
<TextBlock Margin="0,8,0,0" Style="{StaticResource MetricValueStyle}" FontSize="22" Text="{Binding FlowDisplay}" />
<TextBlock Margin="0,4,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding StateText}" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="{Binding StateHint}" />
<Button Margin="0,10,0,0"
Command="{Binding DataContext.TogglePumpControlCommand, RelativeSource={RelativeSource AncestorType=Window}}"
CommandParameter="{Binding}"
Content="{Binding ActionText}"
Background="#FF4D8C72" />
</StackPanel>
</Border>
</DataTemplate>
</Border.Resources>
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="泵启动控制" />
<UniformGrid Columns="2" Margin="0,10,0,0">
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="压力降 / 抗塌陷" />
<ItemsControl Margin="0,8,0,0" ItemsSource="{Binding PressureDropPumpControls}" ItemTemplate="{StaticResource PumpControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Margin="0,0,0,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="再循环" />
<ItemsControl Margin="0,8,0,0" ItemsSource="{Binding RecirculationPumpControls}" ItemTemplate="{StaticResource PumpControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="抗扭结" />
<ItemsControl Margin="0,8,0,0" ItemsSource="{Binding KinkResistancePumpControls}" ItemTemplate="{StaticResource PumpControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Margin="0,0,0,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="血细胞破坏" />
<ItemsControl Margin="0,8,0,0" ItemsSource="{Binding HemolysisPumpControls}" ItemTemplate="{StaticResource PumpControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
</UniformGrid>
</StackPanel>
</Border>
<Border Style="{StaticResource CardBorderStyle}">
<Border.Resources>
<DataTemplate x:Key="ValveControlCardTemplate" DataType="{x:Type models:ValveControlChannel}">
<Border Width="220" Margin="0,0,10,0" Padding="14" Background="#FFF4F8FA" CornerRadius="14">
<StackPanel>
<DockPanel>
<Ellipse Width="12" Height="12" Margin="0,3,8,0" Fill="{Binding IndicatorColor}" DockPanel.Dock="Left" />
<TextBlock FontSize="16" FontWeight="SemiBold" Text="{Binding Name}" TextWrapping="Wrap" />
</DockPanel>
<TextBlock Margin="0,10,0,0" Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding StateText}" />
<TextBlock Margin="0,4,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding StateHint}" />
<Button Margin="0,10,0,0"
Command="{Binding DataContext.ToggleValveControlCommand, RelativeSource={RelativeSource AncestorType=Window}}"
CommandParameter="{Binding}"
Content="{Binding ActionText}"
Background="#FF4D8C72" />
</StackPanel>
</Border>
</DataTemplate>
</Border.Resources>
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="&#x6D4B;&#x8BD5;&#x56DE;&#x8DEF;&#x9600;" />
<ItemsControl Margin="0,10,0,0" ItemsSource="{Binding ValveControls}" ItemTemplate="{StaticResource ValveControlCardTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Border>
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="关键实时读数" />
<WrapPanel Margin="0,0,0,4">
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="阶段" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding CurrentStage}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="设备状态" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding DeviceStatus}" TextWrapping="Wrap" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="近端压力" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding ProximalPressureDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,0,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="远端压力" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding DistalPressureDisplay}" />
</StackPanel>
</Border>
</WrapPanel>
<WrapPanel>
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="压力降/抗塌陷" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding PressureDropPumpFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="再循环主泵" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding RecirculationPumpFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="回流泵" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding ReturnFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,0,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="引流泵" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding DrainageFlowDisplay}" />
</StackPanel>
</Border>
</WrapPanel>
<WrapPanel>
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="抗扭结" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding KinkResistancePumpFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="血细胞破坏单腔引流" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding HemolysisDrainageSingleFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="血细胞破坏单腔回输" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding HemolysisReturnSingleFlowDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,0,8" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="血细胞破坏双腔" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding HemolysisDualLumenFlowDisplay}" />
</StackPanel>
</Border>
</WrapPanel>
<WrapPanel>
<Border Width="180" Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="负压辅助" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding NegativeAssistPressureDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="压力降 ΔP" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding DeltaPressureDisplay}" />
</StackPanel>
</Border>
<Border Width="180" Margin="0,0,0,0" Style="{StaticResource PanelSectionStyle}">
<StackPanel>
<TextBlock Style="{StaticResource CaptionStyle}" Text="再循环率" />
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding RealtimeRecirculationDisplay}" />
</StackPanel>
</Border>
</WrapPanel>
<DockPanel Margin="0,12,0,8">
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="&#x8D8B;&#x52BF;&#x56FE;" />
<Button DockPanel.Dock="Right"
MinWidth="96"
Command="{Binding ClearTrendDataCommand}"
Content="&#x6E05;&#x7A7A;&#x66F2;&#x7EBF;"
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 趋势" />
<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}" />
<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="&#x914D;&#x7F6E;">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="0,6,0,0">
<Border Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="&#x4EA7;&#x54C1;&#x4E0E;&#x8BD5;&#x9A8C;&#x914D;&#x7F6E;" />
<TextBlock Style="{StaticResource CaptionStyle}" Text="&#x4EE5;&#x4E0B;&#x53C2;&#x6570;&#x4F1A;&#x81EA;&#x52A8;&#x4FDD;&#x5B58;&#x5230;&#x672C;&#x5730;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x91CD;&#x542F;&#x540E;&#x81EA;&#x52A8;&#x6062;&#x590D;&#x3002;" 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="&#x4EA7;&#x54C1;&#x578B;&#x53F7;" />
<TextBox Grid.Column="1" Text="{Binding ProductModel, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="&#x9002;&#x7528;&#x4EBA;&#x7FA4;" />
<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="&#x6807;&#x79F0;&#x6700;&#x5927;&#x6D41;&#x91CF; 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="2" Margin="0,0,0,12">
<Border Margin="0,0,8,8" Style="{StaticResource CardBorderStyle}">
<StackPanel>
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="&#x538B;&#x529B;&#x964D;&#x9650;&#x503C;" />
<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="&#x6297;&#x584C;&#x9677;&#x4E0E;&#x518D;&#x5FAA;&#x73AF;&#x9650;&#x503C;" />
<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="&#x6297;&#x584C;&#x9677;&#x5141;&#x8BB8;&#x589E;&#x5E45; %" />
<TextBox Grid.Column="1" Text="{Binding AntiCollapseAllowedIncreaseRate, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="&#x518D;&#x5FAA;&#x73AF; R &#x9650;&#x503C; %" />
<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="&#x6297;&#x584C;&#x9677;&#x5224;&#x5B9A;&#x89C4;&#x5219;&#xFF1A;&#x8D1F;&#x538B;&#x540E;&#x538B;&#x529B;&#x964D;&#x589E;&#x5E45;&#x4E0D;&#x8D85;&#x8FC7;&#x8BE5;&#x9650;&#x503C;&#x3002;" TextWrapping="Wrap" />
</StackPanel>
</Border>
</UniformGrid>
</StackPanel>
</ScrollViewer>
</TabItem>
<TabItem Header="&#x8FFD;&#x6EAF;">
<Grid Margin="0,6,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Margin="0,0,0,10" Padding="14" Background="#FFF4F8FA" CornerRadius="14">
<TextBlock FontSize="15" TextWrapping="Wrap" Text="&#x4EC5;&#x4FDD;&#x7559;&#x672C;&#x5730;&#x8FFD;&#x6EAF;&#xFF1A;&#x65F6;&#x95F4;&#x3001;&#x7ED3;&#x679C;&#x3001;&#x7ED3;&#x675F;&#x8BB0;&#x5F55;&#x548C;&#x62A5;&#x8868;&#x5BFC;&#x51FA;&#x8BB0;&#x5F55;&#x3002;" />
</Border>
<DataGrid Grid.Row="1" ItemsSource="{Binding TraceEvents}" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="&#x65F6;&#x95F4;" Binding="{Binding Timestamp, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}" Width="180" />
<DataGridTextColumn Header="&#x9636;&#x6BB5;" Binding="{Binding Stage}" Width="110" />
<DataGridTextColumn Header="&#x8BE6;&#x60C5;" Binding="{Binding Detail}" Width="*" />
<DataGridTextColumn Header="&#x64CD;&#x4F5C;&#x5458;" Binding="{Binding Operator}" Width="100" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</TabItem>
</TabControl>
</Border>
</Grid>
</Grid>
</Window>