Files
PetroleumViscosityTest/MainWindow.xaml

268 lines
17 KiB
Plaintext
Raw Normal View History

2026-02-12 17:03:23 +08:00
<Window x:Class="PetroleumViscosityTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="石油产品运动粘度测试系统 (GB/T 265-1988)"
Width="1024" Height="768"
WindowStartupLocation="CenterScreen"
FontSize="13">
2026-02-24 18:24:09 +08:00
<Window.Resources>
<!-- 计时按钮样式 -->
<Style x:Key="TimerButtonStyle" TargetType="Button">
2026-02-25 14:22:08 +08:00
<Setter Property="Width" Value="80"/>
<Setter Property="Height" Value="45"/>
2026-02-24 18:24:09 +08:00
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="border"
CornerRadius="5"
Background="{TemplateBinding Background}"
BorderThickness="0">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Background" Value="#FF1E3C72"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="border" Property="Background" Value="#FF0F1F3A"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<!-- 默认背景(渐变) -->
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#FF4A90E2" Offset="0.0"/>
<GradientStop Color="#FF357ABD" Offset="1.0"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
2026-02-12 17:03:23 +08:00
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- ========== 顶部:试样信息、粘度计常数、恒温条件 ========= -->
<Border Grid.Row="0" BorderBrush="DarkGray" BorderThickness="1" Padding="5" CornerRadius="3" Margin="0,0,0,5">
<StackPanel>
<!-- 第一行:试样信息 -->
<WrapPanel Margin="0,0,0,3">
<TextBlock Text="试样编号:" VerticalAlignment="Center"/>
<TextBox x:Name="txtSampleID" Width="120" Margin="5,0,10,0"/>
<TextBlock Text="试样名称:" VerticalAlignment="Center"/>
<TextBox x:Name="txtSampleName" Width="150" Margin="5,0,10,0"/>
<TextBlock Text="试验温度(℃)" VerticalAlignment="Center"/>
<TextBox x:Name="txtTestTemp" Width="60" Margin="5,0,10,0" TextChanged="TxtTestTemp_TextChanged"/>
<TextBlock Text="恒温时间(min)" VerticalAlignment="Center"/>
<TextBox x:Name="txtThermostatTime" Width="50" IsReadOnly="True" Background="LightGray" Margin="5,0,0,0"/>
</WrapPanel>
<!-- 第二行:粘度计常数、密度、操作者 -->
<WrapPanel Margin="0,3,0,3">
<TextBlock Text="粘度计常数 C (mm²/s²)" VerticalAlignment="Center"/>
<TextBox x:Name="txtConstant" Width="100" Margin="5,0,10,0"/>
<TextBlock Text="密度 ρ (g/cm³)" VerticalAlignment="Center"/>
<TextBox x:Name="txtDensity" Width="80" Margin="5,0,10,0"/>
<TextBlock Text="操作者:" VerticalAlignment="Center"/>
<TextBox x:Name="txtOperator" Width="100" Margin="5,0,10,0"/>
<TextBlock Text="试验日期:" VerticalAlignment="Center"/>
<DatePicker x:Name="dpTestDate" Width="120" Margin="5,0,0,0"/>
</WrapPanel>
<!-- 第三行:备注、控制按钮 -->
<WrapPanel Margin="0,3,0,0">
<TextBlock Text="备注:" VerticalAlignment="Center"/>
<TextBox x:Name="txtRemark" Width="300" Margin="5,0,10,0"/>
2026-02-24 18:24:09 +08:00
<Button x:Name="btnClearAll" Content="清空所有" Style="{StaticResource TimerButtonStyle}" Margin="5,0" Click="BtnClearAll_Click"/>
<Button x:Name="btnLoadExample" Content="加载示例" Style="{StaticResource TimerButtonStyle}" Margin="5,0" Click="BtnLoadExample_Click"/>
2026-02-12 17:03:23 +08:00
</WrapPanel>
</StackPanel>
</Border>
<!-- ========== 中间:流动时间测量及计算 ========= -->
<TabControl Grid.Row="1" Margin="0,5,0,5">
<!-- 流动时间录入 -->
<TabItem Header="流动时间测量">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="5">
<GroupBox Header="流动时间记录 (秒)" Padding="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- 第一行4个时间输入框 -->
2026-02-24 18:24:09 +08:00
<!-- 第1次 -->
2026-02-12 17:03:23 +08:00
<StackPanel Grid.Row="0" Grid.Column="0" Margin="5">
<TextBlock Text="第1次" FontWeight="Bold"/>
<TextBox x:Name="txtTime1" Width="80" Margin="0,2"/>
2026-02-25 14:22:08 +08:00
<WrapPanel HorizontalAlignment="Center" Orientation="Vertical">
<Button x:Name="btnStart1" Content="开始" Style="{StaticResource TimerButtonStyle}" Click="BtnStart1_Click" Margin="0,4"/>
<Button x:Name="btnStop1" Content="结束" Style="{StaticResource TimerButtonStyle}" Click="BtnStop1_Click"/>
2026-02-24 15:09:57 +08:00
</WrapPanel>
2026-02-12 17:03:23 +08:00
</StackPanel>
2026-02-24 18:24:09 +08:00
<!-- 第2次 -->
2026-02-12 17:03:23 +08:00
<StackPanel Grid.Row="0" Grid.Column="1" Margin="5">
<TextBlock Text="第2次" FontWeight="Bold"/>
<TextBox x:Name="txtTime2" Width="80" Margin="0,2"/>
2026-02-25 14:22:08 +08:00
<WrapPanel HorizontalAlignment="Center" Orientation="Vertical">
2026-02-24 18:24:09 +08:00
<Button x:Name="btnStart2" Content="开始" Style="{StaticResource TimerButtonStyle}" Click="BtnStart2_Click"/>
2026-02-25 14:22:08 +08:00
<Button x:Name="btnStop2" Content="结束" Style="{StaticResource TimerButtonStyle}" Click="BtnStop2_Click" Margin="0,4"/>
2026-02-24 15:09:57 +08:00
</WrapPanel>
2026-02-12 17:03:23 +08:00
</StackPanel>
2026-02-24 18:24:09 +08:00
<!-- 第3次 -->
2026-02-12 17:03:23 +08:00
<StackPanel Grid.Row="0" Grid.Column="2" Margin="5">
<TextBlock Text="第3次" FontWeight="Bold"/>
<TextBox x:Name="txtTime3" Width="80" Margin="0,2"/>
2026-02-25 14:22:08 +08:00
<WrapPanel HorizontalAlignment="Center" Orientation="Vertical">
2026-02-24 18:24:09 +08:00
<Button x:Name="btnStart3" Content="开始" Style="{StaticResource TimerButtonStyle}" FontSize="11" Click="BtnStart3_Click"/>
2026-02-25 14:22:08 +08:00
<Button x:Name="btnStop3" Content="结束" Style="{StaticResource TimerButtonStyle}" Click="BtnStop3_Click" Margin="0,4"/>
2026-02-24 15:09:57 +08:00
</WrapPanel>
2026-02-12 17:03:23 +08:00
</StackPanel>
2026-02-24 18:24:09 +08:00
<!-- 第4次 -->
2026-02-12 17:03:23 +08:00
<StackPanel Grid.Row="0" Grid.Column="3" Margin="5">
<TextBlock Text="第4次" FontWeight="Bold"/>
<TextBox x:Name="txtTime4" Width="80" Margin="0,2"/>
2026-02-25 14:22:08 +08:00
<WrapPanel HorizontalAlignment="Center" Orientation="Vertical">
2026-02-24 18:24:09 +08:00
<Button x:Name="btnStart4" Content="开始" Style="{StaticResource TimerButtonStyle}" Click="BtnStart4_Click"/>
2026-02-25 14:22:08 +08:00
<Button x:Name="btnStop4" Content="结束" Style="{StaticResource TimerButtonStyle}" Click="BtnStop4_Click" Margin="0,4"/>
2026-02-24 15:09:57 +08:00
</WrapPanel>
2026-02-12 17:03:23 +08:00
</StackPanel>
<!-- 第二行更多时间输入支持最多6次 -->
<StackPanel Grid.Row="1" Grid.Column="0" Margin="5">
<TextBlock Text="第5次 (可选)"/>
<TextBox x:Name="txtTime5" Width="80" Margin="0,2"/>
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="1" Margin="5">
<TextBlock Text="第6次 (可选)"/>
<TextBox x:Name="txtTime6" Width="80" Margin="0,2"/>
</StackPanel>
</Grid>
</GroupBox>
<WrapPanel Margin="0,10,0,10" HorizontalAlignment="Center">
2026-02-24 18:24:09 +08:00
<Button x:Name="btnCalcViscosity" Content="计算运动粘度" Style="{StaticResource TimerButtonStyle}" Width="150" Height="30" Margin="5" Click="BtnCalcViscosity_Click"/>
<Button x:Name="btnAddMeasurement" Content="增加一次测量" Style="{StaticResource TimerButtonStyle}" Width="120" Margin="5" Click="BtnAddMeasurement_Click"/>
<Button x:Name="btnClearTimes" Style="{StaticResource TimerButtonStyle}" Content="清空时间" Width="100" Margin="5" Click="BtnClearTimes_Click"/>
2026-02-12 17:03:23 +08:00
</WrapPanel>
<!-- 计算结果展示 -->
<GroupBox Header="计算结果" Padding="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="平均流动时间 τ (s)" Margin="5"/>
<TextBox x:Name="txtAvgTime" Grid.Row="0" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="运动粘度 ν (mm²/s)" Margin="5"/>
<TextBox x:Name="txtViscosity" Grid.Row="1" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5" FontWeight="Bold"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="动力粘度 η (mPa·s)" Margin="5"/>
<TextBox x:Name="txtDynamicViscosity" Grid.Row="2" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5"/>
<TextBlock Grid.Row="3" Grid.Column="0" Text="有效测量次数:" Margin="5"/>
<TextBox x:Name="txtValidCount" Grid.Row="3" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5"/>
<TextBlock Grid.Row="4" Grid.Column="0" Text="精密度判定:" Margin="5"/>
<TextBox x:Name="txtPrecisionJudge" Grid.Row="4" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5" Foreground="Red"/>
</Grid>
</GroupBox>
<!-- 流动时间原始数据显示 -->
<GroupBox Header="流动时间原始记录" Margin="0,10,0,0">
<ListBox x:Name="lstRawTimes" Height="80" DisplayMemberPath="Display"/>
</GroupBox>
</StackPanel>
</ScrollViewer>
</TabItem>
<!-- 精密度及报告 -->
<TabItem Header="精密度与报告">
<StackPanel Margin="5">
<GroupBox Header="精密度要求 (GB/T 265-1988)" Padding="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="重复性 (同一操作者)" Margin="5"/>
<TextBox x:Name="txtRepeatability" Grid.Row="0" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="再现性 (不同实验室)" Margin="5"/>
<TextBox x:Name="txtReproducibility" Grid.Row="1" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="本次测量重复性 (%)" Margin="5"/>
<TextBox x:Name="txtMeasuredRepeatability" Grid.Row="2" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5"/>
<TextBlock Grid.Row="3" Grid.Column="0" Text="重复性判定:" Margin="5"/>
<TextBox x:Name="txtRepeatJudge" Grid.Row="3" Grid.Column="1" IsReadOnly="True" Background="LightGray" Margin="5" Foreground="Red"/>
</Grid>
</GroupBox>
<WrapPanel Margin="0,10" HorizontalAlignment="Center">
2026-02-24 18:24:09 +08:00
<Button x:Name="btnGenRecord" Style="{StaticResource TimerButtonStyle}" Content="生成原始记录 (附录样式)" Width="180" Margin="5" Padding="5" Click="BtnGenRecord_Click"/>
<Button x:Name="btnGenReport" Style="{StaticResource TimerButtonStyle}" Content="生成测试报告" Width="150" Margin="5" Padding="5" Click="BtnGenReport_Click"/>
<Button x:Name="btnPrintPreview" Style="{StaticResource TimerButtonStyle}" Content="打印预览" Width="100" Margin="5" Padding="5" Click="BtnPrintPreview_Click"/>
2026-02-12 17:03:23 +08:00
</WrapPanel>
<Border BorderBrush="LightBlue" BorderThickness="1" Height="220" CornerRadius="2" Background="WhiteSmoke">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<ContentControl x:Name="ReportContent" Margin="5"/>
</ScrollViewer>
</Border>
</StackPanel>
</TabItem>
</TabControl>
<!-- ========== 底部:状态栏 ========= -->
<StatusBar Grid.Row="2" Background="LightGray">
<StatusBarItem>
<TextBlock x:Name="txtStatus" Text="就绪"/>
</StatusBarItem>
</StatusBar>
</Grid>
</Window>