Files
PetroleumViscosityTest/MainWindow.xaml
2026-02-25 14:22:08 +08:00

268 lines
17 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<Window x:Class="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">
<Window.Resources>
<!-- 计时按钮样式 -->
<Style x:Key="TimerButtonStyle" TargetType="Button">
<Setter Property="Width" Value="80"/>
<Setter Property="Height" Value="45"/>
<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>
<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"/>
<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"/>
</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个时间输入框 -->
<!-- 第1次 -->
<StackPanel Grid.Row="0" Grid.Column="0" Margin="5">
<TextBlock Text="第1次" FontWeight="Bold"/>
<TextBox x:Name="txtTime1" Width="80" Margin="0,2"/>
<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"/>
</WrapPanel>
</StackPanel>
<!-- 第2次 -->
<StackPanel Grid.Row="0" Grid.Column="1" Margin="5">
<TextBlock Text="第2次" FontWeight="Bold"/>
<TextBox x:Name="txtTime2" Width="80" Margin="0,2"/>
<WrapPanel HorizontalAlignment="Center" Orientation="Vertical">
<Button x:Name="btnStart2" Content="开始" Style="{StaticResource TimerButtonStyle}" Click="BtnStart2_Click"/>
<Button x:Name="btnStop2" Content="结束" Style="{StaticResource TimerButtonStyle}" Click="BtnStop2_Click" Margin="0,4"/>
</WrapPanel>
</StackPanel>
<!-- 第3次 -->
<StackPanel Grid.Row="0" Grid.Column="2" Margin="5">
<TextBlock Text="第3次" FontWeight="Bold"/>
<TextBox x:Name="txtTime3" Width="80" Margin="0,2"/>
<WrapPanel HorizontalAlignment="Center" Orientation="Vertical">
<Button x:Name="btnStart3" Content="开始" Style="{StaticResource TimerButtonStyle}" FontSize="11" Click="BtnStart3_Click"/>
<Button x:Name="btnStop3" Content="结束" Style="{StaticResource TimerButtonStyle}" Click="BtnStop3_Click" Margin="0,4"/>
</WrapPanel>
</StackPanel>
<!-- 第4次 -->
<StackPanel Grid.Row="0" Grid.Column="3" Margin="5">
<TextBlock Text="第4次" FontWeight="Bold"/>
<TextBox x:Name="txtTime4" Width="80" Margin="0,2"/>
<WrapPanel HorizontalAlignment="Center" Orientation="Vertical">
<Button x:Name="btnStart4" Content="开始" Style="{StaticResource TimerButtonStyle}" Click="BtnStart4_Click"/>
<Button x:Name="btnStop4" Content="结束" Style="{StaticResource TimerButtonStyle}" Click="BtnStop4_Click" Margin="0,4"/>
</WrapPanel>
</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">
<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"/>
</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">
<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"/>
</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>