Files
test_demo/MX-PD-盘古 - new/PanGu.DieBonderApp/MainShell/MainView.xaml
Shi.Ji e31d3560bb 添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
2026-05-18 11:43:09 +08:00

434 lines
23 KiB
XML

<UserControl x:Class="MainShell.MainView"
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"
xmlns:mw="http://www.maxwell-gp.com/"
xmlns:custom="clr-namespace:MainShell.Resources.CustomControl"
mc:Ignorable="d"
d:DesignHeight="650" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<Style x:Key="DashboardPanelBorderStyle" TargetType="Border">
<Setter Property="Background" Value="{StaticResource ProcessCardBackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ProcessCardBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="8"/>
</Style>
<Style x:Key="DashboardSectionGroupBoxStyle" TargetType="GroupBox" BasedOn="{StaticResource ProcessPageContentGroupBoxStyle}">
<Setter Property="Margin" Value="0,0,0,12"/>
<Setter Property="Padding" Value="14,16,14,14"/>
</Style>
<Style x:Key="DashboardCameraBorderStyle" TargetType="Border">
<Setter Property="Background" Value="#101418"/>
<Setter Property="BorderBrush" Value="{StaticResource ProcessCardBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="6"/>
</Style>
<Style x:Key="DashboardMapBorderStyle" TargetType="Border">
<Setter Property="Background" Value="#F8FAFC"/>
<Setter Property="BorderBrush" Value="{StaticResource ProcessDividerBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="6"/>
<Setter Property="Padding" Value="10"/>
</Style>
<Style x:Key="DashboardMutedTextStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="#6B7280"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="DashboardReadOnlyTextBoxStyle" TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="IsReadOnlyCaretVisible" Value="True"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Cursor" Value="IBeam"/>
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="AcceptsReturn" Value="False"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="VerticalScrollBarVisibility" Value="Disabled"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style x:Key="DashboardInfoCardStyle" TargetType="Border">
<Setter Property="BorderBrush" Value="{StaticResource ProcessDividerBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="6"/>
<Setter Property="Padding" Value="12,10"/>
<Setter Property="Background" Value="#F8FAFC"/>
</Style>
<Style x:Key="DashboardCountCardStyle" TargetType="Border" BasedOn="{StaticResource DashboardInfoCardStyle}">
<Setter Property="Padding" Value="10,8"/>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<Grid Background="{StaticResource ProcessPageBackgroundBrush}" Margin="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="280"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="320"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Margin="0,0,12,0" Style="{StaticResource DashboardPanelBorderStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Style="{StaticResource ProcessCardHeaderBarStyle}" CornerRadius="8,8,0,0">
<TextBlock Text="CAMERA / 相机图像"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{StaticResource ProcessCardHeaderTextStyle}"/>
</Border>
<Border Grid.Row="1" Margin="10,12,10,0" Style="{StaticResource DashboardCameraBorderStyle}">
<Grid>
<ContentControl mw:View.Model="{Binding CameraSearchViewModel}"/>
<Border HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Margin="0,0,8,8"
Background="#660F172A"
CornerRadius="3"
Padding="6,2">
<TextBlock Text="上相机" Opacity="0.9" Foreground="#CBD5E1" FontSize="12"/>
</Border>
</Grid>
</Border>
<Border Grid.Row="2" Margin="10,10,10,0" Style="{StaticResource DashboardCameraBorderStyle}">
<Grid>
<ContentControl mw:View.Model="{Binding CameraLocateViewModel}"/>
<Border HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Margin="0,0,8,8"
Background="#660F172A"
CornerRadius="3"
Padding="6,2">
<TextBlock Text="下相机" Opacity="0.9" Foreground="#CBD5E1" FontSize="12"/>
</Border>
</Grid>
</Border>
<Border Grid.Row="3" Margin="10" Style="{StaticResource DashboardCameraBorderStyle}">
<Grid>
<ContentControl mw:View.Model="{Binding CameraInspectViewModel}"/>
<Border HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Margin="0,0,8,8"
Background="#660F172A"
CornerRadius="3"
Padding="6,2">
<TextBlock Text="复检相机" Opacity="0.9" Foreground="#CBD5E1" FontSize="12"/>
</Border>
</Grid>
</Border>
</Grid>
</Border>
<Grid Grid.Column="1" Margin="0,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Margin="0,0,0,12" Style="{StaticResource DashboardSectionGroupBoxStyle}" Header="MAIN FLOW / 主流程">
<custom:FlowStageDisplayControl FlowNodes="{Binding FlowNodes}"/>
</GroupBox>
<GroupBox Grid.Row="1" Margin="0,0,0,12" Style="{StaticResource DashboardSectionGroupBoxStyle}" Header="WAFER HANDLING / 晶圆上下料">
<custom:FlowStageDisplayControl FlowNodes="{Binding WaferFlowNodes}"/>
</GroupBox>
<GroupBox Grid.Row="2" Margin="0" Style="{StaticResource DashboardSectionGroupBoxStyle}" Header="REAL-TIME MAPPING / 双图展示区">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Style="{StaticResource DashboardInfoCardStyle}" Background="#F6F9FC">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="220"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Rectangle Width="4" Height="18" Fill="{StaticResource ProcessHeaderAccentBrush}" Margin="0,0,10,0"/>
<TextBlock Text="Mapping Progress" Foreground="{StaticResource ProcessTitleForegroundBrush}" FontWeight="SemiBold" VerticalAlignment="Center"/>
</StackPanel>
<TextBlock Grid.Column="1" Text="进度:" VerticalAlignment="Center" Margin="0,0,8,0" Style="{StaticResource DashboardMutedTextStyle}"/>
<Grid Grid.Column="2" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="52"/>
</Grid.ColumnDefinitions>
<ProgressBar Height="14"
Margin="0,0,10,0"
Minimum="0"
Maximum="100"
Value="{Binding DashboardState.MappingProgress}"/>
<TextBlock Grid.Column="1"
Text="{Binding DashboardState.MappingProgress, StringFormat={}{0:F1}%}"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Foreground="{StaticResource ProcessHeaderAccentBrush}"
FontWeight="Bold"/>
</Grid>
</Grid>
</Border>
<Grid Grid.Row="1" Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="12"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Style="{StaticResource DashboardMapBorderStyle}">
<custom:DieMapPanelControl Caption="基板 (Substrate) Map 绘图区"
MapModel="{Binding SubstrateMapModel}"/>
</Border>
<Border Grid.Column="2" Style="{StaticResource DashboardMapBorderStyle}">
<custom:DieMapPanelControl Caption="晶圆 (Wafer) Map 绘图区"
MapModel="{Binding WaferMapModel}"/>
</Border>
</Grid>
</Grid>
</GroupBox>
</Grid>
<Grid Grid.Column="2" Margin="0,6,6,6">
<Grid.RowDefinitions>
<RowDefinition Height="190"/>
<RowDefinition Height="120"/>
<RowDefinition Height="*"/>
<RowDefinition Height="200"/>
</Grid.RowDefinitions>
<GroupBox Header="IDENTIFICATION / 标识" Margin="0,0,0,8" BorderBrush="#C7C7C7" BorderThickness="1">
<Grid Margin="8">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border BorderBrush="#C7C7C7" BorderThickness="1" Background="#EFEFEF" Margin="0,0,0,6">
<StackPanel Margin="8,6">
<TextBlock Text="产品 ID" Foreground="#6B7280"/>
<TextBox Text="{Binding DashboardState.ProductId}"
Foreground="#0B4A8B"
FontSize="20"
Width="Auto"
FontWeight="Bold"
IsReadOnly="True"
IsReadOnlyCaretVisible="True"
BorderThickness="0"
Background="Transparent"
Padding="0"
Cursor="IBeam"
TextWrapping="Wrap"
AcceptsReturn="False"
HorizontalAlignment="Stretch"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Disabled"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Center"
ToolTip="{Binding DashboardState.ProductId}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" BorderBrush="#C7C7C7" BorderThickness="1" Background="#EFEFEF">
<StackPanel Margin="8,6">
<TextBlock Text="芯片 ID" Foreground="#6B7280"/>
<TextBox Text="{Binding DashboardState.ChipId}"
Foreground="#EA580C"
Width="Auto"
FontSize="20"
FontWeight="Bold"
IsReadOnly="True"
IsReadOnlyCaretVisible="True"
BorderThickness="0"
Background="Transparent"
Padding="0"
Cursor="IBeam"
TextWrapping="Wrap"
AcceptsReturn="False"
HorizontalAlignment="Stretch"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Disabled"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Center"
ToolTip="{Binding DashboardState.ChipId}"/>
</StackPanel>
</Border>
</Grid>
</GroupBox>
<GroupBox Grid.Row="1" Header="RECIPE / 配方" Margin="0,0,0,8" BorderBrush="#C7C7C7" BorderThickness="1">
<StackPanel Margin="10,8">
<TextBlock Text="基板配方:" Foreground="#6B7280"/>
<TextBlock Text="{Binding SubstrateRecipe}" FontWeight="Bold"/>
<TextBlock Text="芯片配方:" Foreground="#6B7280" Margin="0,4,0,0"/>
<TextBlock Text="{Binding ChipRecipe}" FontWeight="Bold"/>
</StackPanel>
</GroupBox>
<GroupBox Grid.Row="2" BorderBrush="#C7C7C7" BorderThickness="1">
<GroupBox.Header>
<Grid Width="250">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="PRODUCTION STATS/ 统计" VerticalAlignment="Center" Foreground="#0B4A8B" FontWeight="Bold"/>
<Button Grid.Column="1"
Content="↺ 清除统计"
Click="{mw:Action ClearStatistics}"
Style="{StaticResource ClearStatsButtonStyle}"/>
</Grid>
</GroupBox.Header>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="0,2,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="加工基板总数"/>
<TextBlock Grid.Column="1" Text="{Binding DashboardState.ProcessedSubstrateTotal}" FontWeight="Bold" Foreground="#1D4ED8"/>
<TextBlock Grid.Column="2" Text="PCS" Margin="6,0,0,0" Foreground="#94A3B8"/>
</Grid>
<Grid Grid.Row="1" Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="当前基板待加工芯片"/>
<TextBlock Grid.Column="1" Text="{Binding DashboardState.PendingCount}" FontWeight="Bold"/>
</Grid>
<Grid Grid.Row="2" Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="当前基板已加工芯片"/>
<TextBlock Grid.Column="1" Text="{Binding DashboardState.ProcessedCount}" FontWeight="Bold" Foreground="#16A34A"/>
</Grid>
<Grid Grid.Row="3" Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border BorderBrush="#C7C7C7" BorderThickness="1" Background="#EFF6FF" Padding="8,6">
<StackPanel>
<TextBlock Text="实时 UPH" Foreground="#2563EB" HorizontalAlignment="Center"/>
<TextBlock Text="{Binding DashboardState.RealTimeUph}" Foreground="#1D4ED8" FontSize="28" FontWeight="Bold" HorizontalAlignment="Center"/>
</StackPanel>
</Border>
<Border Grid.Column="2" BorderBrush="#C7C7C7" BorderThickness="1" Background="#F0FDF4" Padding="8,6">
<StackPanel>
<TextBlock Text="综合 UPH" Foreground="#16A34A" HorizontalAlignment="Center"/>
<TextBlock Text="{Binding DashboardState.YieldUph}" Foreground="#16A34A" FontSize="28" FontWeight="Bold" HorizontalAlignment="Center"/>
</StackPanel>
</Border>
</Grid>
</Grid>
</GroupBox>
<GroupBox Grid.Row="3" Header="LIVE CONTROL / 运行控制" Margin="0,8,0,0" BorderBrush="#C7C7C7" BorderThickness="1">
<Grid Margin="8,8">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="6"/>
<RowDefinition Height="*"/>
<RowDefinition Height="6"/>
<RowDefinition Height="*"/>
<RowDefinition Height="6"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Grid.Row="0" Content="启动 START"
Click="{mw:Action StartProcess}"
Width="190"
Height="34"
Margin="0"
Padding="8,0"
FontSize="15"
FontWeight="Bold"
HorizontalAlignment="Center"
VerticalAlignment="Center"
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}"
Style="{StaticResource StartButtonStyle}"/>
<Button Grid.Row="2" Content="暂停 PAUSE"
Click="{mw:Action PauseProcess}"
Width="190"
Height="34"
Margin="0"
Padding="8,0"
FontSize="15"
FontWeight="Bold"
HorizontalAlignment="Center"
VerticalAlignment="Center"
IsEnabled="{Binding CanPauseProcess}"
Style="{StaticResource StopButtonStyle}"/>
<Button Grid.Row="4" Content="恢复 RESUME"
Click="{mw:Action ResumeProcess}"
Width="190"
Height="34"
Margin="0"
Padding="8,0"
FontSize="15"
FontWeight="Bold"
HorizontalAlignment="Center"
VerticalAlignment="Center"
IsEnabled="{Binding CanResumeProcess}"
Style="{StaticResource StartButtonStyle}"/>
<Button Grid.Row="6" Content="停止 STOP"
Click="{mw:Action StopProcess}"
Width="190"
Height="34"
Margin="0"
Padding="8,0"
FontSize="15"
FontWeight="Bold"
HorizontalAlignment="Center"
VerticalAlignment="Center"
IsEnabled="{Binding Runner.IsRunning}"
Style="{StaticResource StopButtonStyle}"/>
</Grid>
</GroupBox>
</Grid>
</Grid>
</UserControl>