257 lines
17 KiB
XML
257 lines
17 KiB
XML
<UserControl x:Class="ASTM_D7896_Tester.Views.D7896View"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||
mc:Ignorable="d"
|
||
d:DesignHeight="768" d:DesignWidth="1024">
|
||
|
||
<UserControl.Resources>
|
||
<!-- 全局字体 -->
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="FontFamily" Value="Segoe UI"/>
|
||
<Setter Property="FontSize" Value="13"/>
|
||
</Style>
|
||
<Style TargetType="TextBox">
|
||
<Setter Property="FontFamily" Value="Segoe UI"/>
|
||
<Setter Property="FontSize" Value="13"/>
|
||
<Setter Property="BorderBrush" Value="#CCCCCC"/>
|
||
<Setter Property="BorderThickness" Value="1"/>
|
||
<Setter Property="Padding" Value="4,2"/>
|
||
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||
</Style>
|
||
<Style TargetType="Button">
|
||
<Setter Property="FontFamily" Value="Segoe UI"/>
|
||
<Setter Property="FontSize" Value="13"/>
|
||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||
<Setter Property="Background">
|
||
<Setter.Value>
|
||
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
|
||
<GradientStop Color="#F0F0F0" Offset="0"/>
|
||
<GradientStop Color="#E0E0E0" Offset="1"/>
|
||
</LinearGradientBrush>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Setter Property="BorderBrush" Value="#ADADAD"/>
|
||
<Setter Property="BorderThickness" Value="1"/>
|
||
<Setter Property="Padding" Value="12,6"/>
|
||
<Setter Property="Cursor" Value="Hand"/>
|
||
<Style.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter Property="Background">
|
||
<Setter.Value>
|
||
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
|
||
<GradientStop Color="#E6F2FF" Offset="0"/>
|
||
<GradientStop Color="#D0E4F7" Offset="1"/>
|
||
</LinearGradientBrush>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Setter Property="BorderBrush" Value="#7CA4C7"/>
|
||
</Trigger>
|
||
<Trigger Property="IsPressed" Value="True">
|
||
<Setter Property="Background">
|
||
<Setter.Value>
|
||
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
|
||
<GradientStop Color="#C0D9F0" Offset="0"/>
|
||
<GradientStop Color="#A8C4E0" Offset="1"/>
|
||
</LinearGradientBrush>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Trigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
|
||
<!-- 卡片阴影效果 -->
|
||
<DropShadowEffect x:Key="CardShadow" BlurRadius="8" ShadowDepth="2" Opacity="0.15" Color="Gray"/>
|
||
|
||
<!-- 主按钮绿色渐变(修复:将资源定义在正确的位置) -->
|
||
<LinearGradientBrush x:Key="PrimaryButtonBrush" EndPoint="0,1" StartPoint="0,0">
|
||
<GradientStop Color="#4CAF50" Offset="0"/>
|
||
<GradientStop Color="#388E3C" Offset="1"/>
|
||
</LinearGradientBrush>
|
||
|
||
<!-- 数据表格样式 -->
|
||
<Style TargetType="DataGrid">
|
||
<Setter Property="FontFamily" Value="Segoe UI"/>
|
||
<Setter Property="FontSize" Value="12"/>
|
||
<Setter Property="RowHeight" Value="28"/>
|
||
<Setter Property="HeadersVisibility" Value="Column"/>
|
||
<Setter Property="GridLinesVisibility" Value="Horizontal"/>
|
||
<Setter Property="BorderBrush" Value="#E0E0E0"/>
|
||
<Setter Property="BorderThickness" Value="1"/>
|
||
<Setter Property="AlternatingRowBackground" Value="#F9F9F9"/>
|
||
</Style>
|
||
<Style TargetType="DataGridColumnHeader">
|
||
<Setter Property="Background">
|
||
<Setter.Value>
|
||
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
|
||
<GradientStop Color="#F5F5F5" Offset="0"/>
|
||
<GradientStop Color="#E8E8E8" Offset="1"/>
|
||
</LinearGradientBrush>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Setter Property="BorderBrush" Value="#D0D0D0"/>
|
||
<Setter Property="BorderThickness" Value="0,0,1,1"/>
|
||
<Setter Property="Foreground" Value="#333333"/>
|
||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||
<Setter Property="Height" Value="32"/>
|
||
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
||
</Style>
|
||
|
||
<!-- 逆布尔转换器(如果还没在App.xaml中定义,可以在这里定义) -->
|
||
<!-- 注意:如果已经在App.xaml中定义了InverseBooleanConverter,请注释掉下面这一行 -->
|
||
<!-- <converters:InverseBooleanConverter x:Key="InverseBooleanConverter"/> -->
|
||
</UserControl.Resources>
|
||
|
||
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Background="#F2F2F2">
|
||
<Grid Margin="15">
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="*"/>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="Auto"/>
|
||
</Grid.RowDefinitions>
|
||
|
||
<!-- 样品基本信息栏(卡片) -->
|
||
<Border Grid.Row="0" Background="White" CornerRadius="6" Padding="12" Margin="0,0,0,10" Effect="{StaticResource CardShadow}">
|
||
<WrapPanel>
|
||
<TextBlock Text="样品ID:" VerticalAlignment="Center" FontWeight="SemiBold" Margin="0,0,8,0"/>
|
||
<TextBox Text="{Binding SampleId}" Width="140" Margin="0,0,25,0"/>
|
||
<TextBlock Text="测试温度(℃):" VerticalAlignment="Center" FontWeight="SemiBold" Margin="0,0,8,0"/>
|
||
<TextBox Text="{Binding TestTemperature}" Width="70" IsReadOnly="True" Background="#F0F8FF" Margin="0,0,25,0"/>
|
||
<TextBlock Text="日期:" VerticalAlignment="Center" FontWeight="SemiBold" Margin="0,0,8,0"/>
|
||
<TextBox Text="{Binding TestDateTime}" Width="150" IsReadOnly="True" Background="#F0F8FF" Margin="0,0,25,0"/>
|
||
<TextBlock Text="状态:" VerticalAlignment="Center" FontWeight="SemiBold" Margin="0,0,8,0"/>
|
||
<TextBox Text="{Binding StatusMessage}" Width="210" IsReadOnly="True" Background="#FFF7E6"/>
|
||
</WrapPanel>
|
||
</Border>
|
||
|
||
<!-- 样品体积卡片 -->
|
||
<Border Grid.Row="1" Background="White" CornerRadius="6" Padding="12" Margin="0,5" Effect="{StaticResource CardShadow}">
|
||
<WrapPanel>
|
||
<TextBlock Text="样品体积 (mL) [7.5]:" VerticalAlignment="Center" Width="140" FontWeight="SemiBold"/>
|
||
<TextBox Text="{Binding SampleVolume}" Width="80" Margin="5,0"/>
|
||
<TextBlock Text="(标准要求约40 mL)" Foreground="#777777" VerticalAlignment="Center" Margin="15,0,0,0"/>
|
||
</WrapPanel>
|
||
</Border>
|
||
|
||
<!-- 合规性确认区域(卡片) -->
|
||
<Border Grid.Row="2" Background="White" CornerRadius="6" Padding="12" Margin="0,5" Effect="{StaticResource CardShadow}">
|
||
<StackPanel>
|
||
<TextBlock Text="测试前确认(依据 ASTM D7896-19)" FontWeight="Bold" FontSize="14" Margin="0,0,0,12" Foreground="#1E4F7A"/>
|
||
<WrapPanel>
|
||
<!-- 清洁确认 -->
|
||
<Border BorderBrush="#DDDDDD" BorderThickness="1" Padding="8" Margin="0,0,12,0" Width="210" CornerRadius="4" Background="#FEFEFE">
|
||
<StackPanel>
|
||
<TextBlock Text="章节7.1:采样池清洁" FontWeight="SemiBold" Margin="0,0,0,6"/>
|
||
<TextBox Text="{Binding CleanerName}" Width="120" Margin="0,4" ToolTip="请输入清洁人姓名"/>
|
||
<Button Content="确认清洁" Command="{Binding ConfirmCleanCommand}" Margin="0,4" Width="100"/>
|
||
<TextBlock Text="{Binding IsCleanConfirmed, StringFormat='已确认: {0}'}" FontSize="11" TextAlignment="Center" Margin="0,4"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<!-- 排气泡确认 -->
|
||
<Border BorderBrush="#DDDDDD" BorderThickness="1" Padding="8" Margin="0,0,12,0" Width="210" CornerRadius="4" Background="#FEFEFE">
|
||
<StackPanel>
|
||
<TextBlock Text="章节7.6:清除气泡" FontWeight="SemiBold" Margin="0,0,0,6"/>
|
||
<Button Content="确认已清除气泡" Command="{Binding ConfirmBubbleRemovedCommand}" Margin="0,8" Width="120"/>
|
||
<TextBlock Text="{Binding BubbleRemoved, StringFormat='已确认: {0}'}" FontSize="11" TextAlignment="Center" Margin="0,4"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<!-- 铂兼容性 -->
|
||
<Border BorderBrush="#DDDDDD" BorderThickness="1" Padding="8" Margin="0,0,12,0" Width="210" CornerRadius="4" Background="#FEFEFE">
|
||
<StackPanel>
|
||
<TextBlock Text="章节1.4:铂反应性" FontWeight="SemiBold" Margin="0,0,0,6"/>
|
||
<Button Content="确认液体与铂兼容" Command="{Binding ConfirmPlatinumCompatibleCommand}" Margin="0,4" Width="132"/>
|
||
<TextBox Text="{Binding LiquidReactivityNote}" Width="120" Margin="0,4" ToolTip="备注(可选)"/>
|
||
<TextBlock Text="{Binding PlatinumCompatible, StringFormat='已确认: {0}'}" FontSize="11" TextAlignment="Center"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<!-- 环境温度校准 -->
|
||
<Border BorderBrush="#DDDDDD" BorderThickness="1" Padding="8" Width="210" CornerRadius="4" Background="#FEFEFE">
|
||
<StackPanel>
|
||
<TextBlock Text="章节8.1:环境温度校准" FontWeight="SemiBold" Margin="0,0,0,6"/>
|
||
<Button Content="开始校准" Command="{Binding CalibrateAmbientCommand}" Margin="0,8" Width="100"/>
|
||
<TextBlock Text="{Binding AmbientTemperature, StringFormat='温度: {0:F1} °C'}" TextAlignment="Center" Margin="0,4"/>
|
||
<TextBlock Text="{Binding AmbientCalibrated, StringFormat='校准状态: {0}'}" FontSize="11" TextAlignment="Center"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</WrapPanel>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- 加压设置卡片 -->
|
||
<Border Grid.Row="3" Background="White" CornerRadius="6" Padding="12" Margin="0,5" Effect="{StaticResource CardShadow}">
|
||
<WrapPanel>
|
||
<CheckBox IsChecked="{Binding UsePressure}" Content="使用加压测试 (附录A2)" VerticalAlignment="Center" Width="200" Margin="0,0,20,0"/>
|
||
<TextBlock Text="压力 (kPa):" VerticalAlignment="Center" Margin="0,0,8,0"/>
|
||
<TextBox Text="{Binding PressureValue}" Width="80" IsEnabled="{Binding UsePressure}" Margin="0,0,20,0"/>
|
||
<TextBlock Text="(当液体蒸气压 >33.8 kPa时必须加压)" Foreground="#777777" VerticalAlignment="Center"/>
|
||
</WrapPanel>
|
||
</Border>
|
||
|
||
<!-- 测量数据表格(卡片内嵌表格) -->
|
||
<Border Grid.Row="4" Background="White" CornerRadius="6" Padding="8" Margin="0,8" Effect="{StaticResource CardShadow}">
|
||
<DataGrid ItemsSource="{Binding Measurements}" AutoGenerateColumns="False"
|
||
CanUserAddRows="False" IsReadOnly="True"
|
||
HeadersVisibility="Column" GridLinesVisibility="Horizontal"
|
||
RowHeight="28" MinHeight="180">
|
||
<DataGrid.Columns>
|
||
<DataGridTextColumn Header="序号" Binding="{Binding Index}" Width="60" IsReadOnly="True"/>
|
||
<DataGridTextColumn Header="热导率 (W/m·K)" Binding="{Binding ThermalConductivity, StringFormat=F5}" Width="*" IsReadOnly="True"/>
|
||
<DataGridTextColumn Header="热扩散率 (×10⁻⁶ m²/s)" Binding="{Binding ThermalDiffusivity, StringFormat=F5}" Width="*" IsReadOnly="True"/>
|
||
<DataGridTextColumn Header="体积热容 (kJ/m³·K)" Binding="{Binding VolumetricHeatCapacity, StringFormat=F2}" Width="*" IsReadOnly="True"/>
|
||
</DataGrid.Columns>
|
||
</DataGrid>
|
||
</Border>
|
||
|
||
<!-- 平均值显示卡片(高亮) -->
|
||
<Border Grid.Row="5" Background="#E8F0FE" CornerRadius="6" Padding="12" Margin="0,8" Effect="{StaticResource CardShadow}">
|
||
<StackPanel>
|
||
<TextBlock Text="测量平均值" FontWeight="Bold" FontSize="14" Margin="0,0,0,8" Foreground="#1E4F7A"/>
|
||
<WrapPanel>
|
||
<TextBlock Text="平均热导率:" Width="100" FontWeight="SemiBold"/>
|
||
<TextBox Text="{Binding AverageThermalConductivity, StringFormat=F5}" Width="100" IsReadOnly="True" Background="White"/>
|
||
<TextBlock Text="W/m·K" Margin="6,0,30,0"/>
|
||
<TextBlock Text="平均热扩散率:" Width="120" FontWeight="SemiBold"/>
|
||
<TextBox Text="{Binding AverageThermalDiffusivity, StringFormat=F5}" Width="100" IsReadOnly="True" Background="White"/>
|
||
<TextBlock Text="×10⁻⁶ m²/s" Margin="6,0,30,0"/>
|
||
<TextBlock Text="平均体积热容:" Width="100" FontWeight="SemiBold"/>
|
||
<TextBox Text="{Binding AverageVolumetricHeatCapacity, StringFormat=F2}" Width="100" IsReadOnly="True" Background="White"/>
|
||
<TextBlock Text="kJ/m³·K" Margin="6,0,0,0"/>
|
||
</WrapPanel>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- 系统校准卡片 -->
|
||
<Border Grid.Row="6" Background="White" CornerRadius="6" Padding="12" Margin="0,5" Effect="{StaticResource CardShadow}">
|
||
<StackPanel>
|
||
<TextBlock Text="系统校准 (附录A3)" FontWeight="Bold" FontSize="14" Margin="0,0,0,8" Foreground="#1E4F7A"/>
|
||
<WrapPanel VerticalAlignment="Center">
|
||
<TextBlock Text="参考液:" VerticalAlignment="Center"/>
|
||
<ComboBox ItemsSource="{Binding ReferenceLiquids}" SelectedItem="{Binding SelectedReferenceLiquid}" Width="110" Margin="8,0" Background="White"/>
|
||
<TextBlock Text="参考热导率 (W/m·K):" VerticalAlignment="Center" Margin="15,0,5,0"/>
|
||
<TextBox Text="{Binding ReferenceConductivity}" Width="80" Margin="0,0,15,0"/>
|
||
<Button Content="开始校准" Command="{Binding PerformSystemCalibrationCommand}" Width="100"
|
||
IsEnabled="{Binding IsCalibrating, Converter={StaticResource InverseBooleanConverter}}"/>
|
||
</WrapPanel>
|
||
<TextBlock Text="{Binding CalibrationStatus}" FontSize="11" Foreground="#0066CC" Margin="0,8,0,0"/>
|
||
<TextBlock Text="注:使用已知热导率的参考液(如蒸馏水,0.606 W/m·K @25℃)验证系统精度,误差应在±2%以内。"
|
||
FontSize="10" Foreground="#666666" Margin="0,5,0,0"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- 操作按钮 -->
|
||
<StackPanel Grid.Row="7" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,15,0,10">
|
||
<Button Content="▶ 开始测试" Command="{Binding StartTestCommand}" Width="130" Height="38" Margin="8"
|
||
IsEnabled="{Binding IsTesting, Converter={StaticResource InverseBooleanConverter}}"
|
||
Background="{StaticResource PrimaryButtonBrush}"/>
|
||
<Button Content="⟳ 重置" Command="{Binding ResetCommand}" Width="100" Height="38" Margin="8"/>
|
||
<Button Content="📄 生成报告" Command="{Binding GenerateReportCommand}" Width="110" Height="38" Margin="8"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</ScrollViewer>
|
||
</UserControl> |