添加 MX-PD-盘古 项目文件

将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
Shi.Ji
2026-05-18 11:43:09 +08:00
parent 03632a379d
commit e31d3560bb
739 changed files with 99783 additions and 0 deletions

View File

@@ -0,0 +1,713 @@
<UserControl x:Class="MainShell.AlgorithmCalib.View.DieFusionCalibView"
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:local="clr-namespace:MainShell.AlgorithmCalib.View"
xmlns:mw="http://www.maxwell-gp.com/"
xmlns:customControl="clr-namespace:MainShell.Resources.CustomControl"
mc:Ignorable="d"
d:DesignHeight="800" d:DesignWidth="1200">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<Style x:Key="VerifyButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#2B6CB0"/>
<Setter Property="BorderBrush" Value="#2B6CB0"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2C5282"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#1A365D"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackground}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ModuleCardStyle" TargetType="Border">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="#E0E4EA"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="6"/>
<Setter Property="Margin" Value="0,0,0,12"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="#000000" Opacity="0.06" BlurRadius="8" ShadowDepth="2"
Direction="270"/>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SectionHeaderTextStyle" TargetType="TextBlock">
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="ParamLabelStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="#4A5568"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
<Style x:Key="ParamNumberBoxStyle" TargetType="mw:NumberBox">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Margin" Value="6,2"/>
<Setter Property="Minimum" Value="-99999"/>
<Setter Property="Maximum" Value="99999"/>
<Setter Property="DecimalPlaces" Value="3"/>
<Setter Property="Foreground" Value="#1568D5"/>
</Style>
<Style x:Key="ReadOnlyNumberBoxStyle" TargetType="mw:NumberBox" BasedOn="{StaticResource
ParamNumberBoxStyle}">
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="Background" Value="#F0F4F8"/>
<Setter Property="Foreground" Value="#4A5568"/>
</Style>
<Style x:Key="IntParamNumberBoxStyle" TargetType="mw:IntNumberBox">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Margin" Value="6,2"/>
<Setter Property="mw:NumericKeypadAttach.IsEnabled" Value="True"/>
<Setter Property="Minimum" Value="0"/>
<Setter Property="Maximum" Value="1000"/>
</Style>
<Style x:Key="SmallActionButtonStyle" TargetType="Button">
<Setter Property="Height" Value="28"/>
<Setter Property="Padding" Value="10,0"/>
<Setter Property="Margin" Value="4,2"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="#EDF2F7" BorderBrush="#CBD5E0"
BorderThickness="1" CornerRadius="4"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="#E2E8F0"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="#CBD5E0"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="bd" Property="Background" Value="#F7FAFC"/>
<Setter TargetName="bd" Property="BorderBrush" Value="#E2E8F0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="StartButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#1A202C"/>
<Setter Property="BorderBrush" Value="#1A202C"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2D3748"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#0F141B"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackground}"/>
<Setter Property="BorderBrush" Value="{StaticResource DisabledBackground}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="StopButtonStyle" TargetType="Button" BasedOn="{StaticResource
BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#E53E3E"/>
<Setter Property="BorderBrush" Value="#E53E3E"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#C53030"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#9B2C2C"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- ==================== 左侧:相机预览 ==================== -->
<Border Grid.Column="0" Margin="0,0,4,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Padding="10,0">
<Grid>
<TextBlock Text="相机预览"
Foreground="#7A8FA6"
FontSize="11"
FontWeight="SemiBold"
VerticalAlignment="Center"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
VerticalAlignment="Center">
<Ellipse Width="7" Height="7" Fill="#28A745" Margin="0,0,4,0"/>
<TextBlock Text="LIVE" Foreground="#28A745" FontSize="10" FontWeight="Bold"/>
</StackPanel>
</Grid>
</Border>
<ContentControl Grid.Row="1" Content="{Binding CameraAxisViewModelSevice}"/>
</Grid>
</Border>
<!-- ==================== 右侧Tab切换 ==================== -->
<Grid Grid.Column="1">
<TabControl>
<!-- ====== Tab 1标定 ====== -->
<TabItem Header="标定">
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="False"
PanningMode="VerticalOnly"
Padding="8,8,8,0">
<StackPanel>
<!-- ====== 卡片 1WS运动系标定位置 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#E8821A" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="WS运动系标定位置"
Foreground="#E8821A"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="WS平台标定X1(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.MoveAxisPos, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="80"/>
<Button Grid.Column="2"
Content="移到此位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveWSCalibPosPosition}"/>
</Grid>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="X2"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.ApproachXPos}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="80"/>
<TextBlock Grid.Column="2"
Text="Y1"
Style="{StaticResource ParamLabelStyle}"/>
<mw:NumberBox Grid.Column="3"
Value="{Binding WsFusionCalibParItem.ApproachYPos}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="80"/>
<Button Grid.Column="4"
Content="中心对齐"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnApproachWSCalibPosition}"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 卡片 2相机起始位置 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="相机起始位置"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="CameraX(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.CameraAxisPos, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<Button Grid.Column="2"
Content="计算位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnCalculateCameraPosition}"/>
<Button Grid.Column="3"
Content="读取当前位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnSetCameraPosition}"/>
<Button Grid.Column="4"
Content="移到此位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveCameraPosition}"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 卡片 3WS起始位置 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="WS起始位置"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="StartX(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.StartX}"
Style="{StaticResource ReadOnlyNumberBoxStyle}"
Width="100"/>
<TextBlock Grid.Column="2"
Text="StartY(mm)"
Style="{StaticResource ParamLabelStyle}"/>
<mw:NumberBox Grid.Column="3"
Value="{Binding WsFusionCalibParItem.StartY}"
Style="{StaticResource ReadOnlyNumberBoxStyle}"
Width="100"/>
</Grid>
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
<Button Content="计算位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnCalculateWSPosition}"/>
<Button Content="读取当前位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnSetWaferStartPosition}"/>
<Button Content="移到此位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveWaferStartPosition}"/>
<Button Content="对齐中心"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveToCenter}"/>
</StackPanel>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 卡片 4标定参数 ====== -->
<Border Style="{StaticResource ModuleCardStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="标定参数"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8" IsEnabled="{Binding Motion.IsFinish}">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="WaferStepXY(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.CalibStep, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<TextBlock Grid.Column="2"
Text="WaferCountXY"
Style="{StaticResource ParamLabelStyle}"/>
<mw:IntNumberBox Grid.Column="3"
Value="{Binding WsFusionCalibParItem.CalibCount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
</Grid>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="StepX1(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.Step, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<TextBlock Grid.Column="2"
Text="CountX1"
Style="{StaticResource ParamLabelStyle}"/>
<mw:IntNumberBox Grid.Column="3"
Value="{Binding WsFusionCalibParItem.Count, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Minimum="1"
Maximum="10000"
Width="100"/>
</Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
Margin="0,8,0,0">
<Button Content="开始"
Click="{mw:Action btnStart}"
Style="{StaticResource StartButtonStyle}"
IsEnabled="{Binding Motion.IsFinish}"/>
<Button Content="停止"
Click="{mw:Action btnStop}"
Style="{StaticResource StopButtonStyle}"/>
</StackPanel>
</StackPanel>
</Border>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<!-- ====== Tab 2验证 ====== -->
<TabItem Header="验证">
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="False"
PanningMode="VerticalOnly"
Padding="8,8,8,0">
<StackPanel>
<!-- ====== 卡片 1WS运动系标定位置 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#E8821A" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="WS运动系验证位置"
Foreground="#E8821A"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="WS平台标定X1(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.MoveAxisPos, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="80"/>
<Button Grid.Column="2"
Content="移到此位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveWSCalibPosPosition}"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 卡片 2WS运动位置验证 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="WS运动位置"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<!-- 起点坐标 -->
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="StartX(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.WaferStartVerifyX}"
Style="{StaticResource ReadOnlyNumberBoxStyle}"
Width="100"/>
<TextBlock Grid.Column="2"
Text="StartY(mm)"
Style="{StaticResource ParamLabelStyle}"/>
<mw:NumberBox Grid.Column="3"
Value="{Binding WsFusionCalibParItem.WaferStartVerifyY}"
Style="{StaticResource ReadOnlyNumberBoxStyle}"
Width="100"/>
</Grid>
<!-- 设置起点 -->
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="1" Content="设置起点"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveToCenter}"/>
<Button Grid.Column="3"
Content="移动到起点"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveToStartPoint}"/>
</Grid>
</StackPanel>
<!-- Step + 移动到起点 -->
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="Step(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.WaferVerityStep}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
</Grid>
<!-- Count X / Y -->
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="CountX"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:IntNumberBox Grid.Column="1"
Value="{Binding WsFusionCalibParItem.WaferVerityCountX}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<TextBlock Grid.Column="2"
Text="CountY"
Style="{StaticResource ParamLabelStyle}"/>
<mw:IntNumberBox Grid.Column="3"
Value="{Binding WsFusionCalibParItem.WaferVerityCountY}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
</Grid>
<!-- 飞拍 + 验证按钮 -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
Margin="0,8,0,0">
<Button Content="开始飞拍"
Click="{mw:Action btnMoveWafer}"
Style="{StaticResource StartButtonStyle}"
IsEnabled="{Binding Motion.IsFinish}"/>
<Button Content="以当前相机位置验证"
Click="{mw:Action btnVerityWafer}"
Style="{StaticResource VerifyButtonStyle}"
Width="150"
IsEnabled="{Binding Motion.IsFinish}"/>
<Button Content="停止"
Click="{mw:Action btnStopVerityWafer}"
Style="{StaticResource StopButtonStyle}"/>
</StackPanel>
</StackPanel>
</Border>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
</TabControl>
</Grid>
<customControl:LoadingWaitView Grid.ColumnSpan="2" Panel.ZIndex="1000"/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MainShell.AlgorithmCalib.View
{
/// <summary>
/// DieFusionCalibView.xaml 的交互逻辑
/// </summary>
public partial class DieFusionCalibView : UserControl
{
public DieFusionCalibView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,369 @@
<UserControl x:Class="MainShell.PageCalib.AlgorithmCalib.View.FusionCalib.FusionAlignVerifyView"
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:local="clr-namespace:MainShell.PageCalib.AlgorithmCalib.View.FusionCalib"
xmlns:mw="http://www.maxwell-gp.com/"
xmlns:customControl="clr-namespace:MainShell.Resources.CustomControl"
mc:Ignorable="d"
d:DesignHeight="800" d:DesignWidth="1200">
<UserControl.Resources>
<!-- 复用标定页面的样式 -->
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<Style x:Key="StartButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#1A202C"/>
<Setter Property="BorderBrush" Value="#1A202C"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2D3748"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#0F141B"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackground}"/>
<Setter Property="BorderBrush" Value="{StaticResource DisabledBackground}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="VerifyButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#2B6CB0"/>
<Setter Property="BorderBrush" Value="#2B6CB0"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2C5282"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#1A365D"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackground}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="StopButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#E53E3E"/>
<Setter Property="BorderBrush" Value="#E53E3E"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#C53030"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#9B2C2C"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ModuleCardStyle" TargetType="Border">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="#E0E4EA"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="6"/>
<Setter Property="Margin" Value="0,0,0,12"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="#000000" Opacity="0.06" BlurRadius="8" ShadowDepth="2" Direction="270"/>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SectionHeaderTextStyle" TargetType="TextBlock">
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="ParamLabelStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="#4A5568"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
<Style x:Key="ReadOnlyNumberBoxStyle" TargetType="mw:NumberBox">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Margin" Value="6,2"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="Background" Value="#F0F4F8"/>
<Setter Property="Foreground" Value="#4A5568"/>
</Style>
<Style x:Key="SmallActionButtonStyle" TargetType="Button">
<Setter Property="Height" Value="28"/>
<Setter Property="Padding" Value="10,0"/>
<Setter Property="Margin" Value="4,2"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="#EDF2F7" BorderBrush="#CBD5E0"
BorderThickness="1" CornerRadius="4"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="#E2E8F0"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="#CBD5E0"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="bd" Property="Background" Value="#F7FAFC"/>
<Setter TargetName="bd" Property="BorderBrush" Value="#E2E8F0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="StepButtonStyle" TargetType="Button">
<Setter Property="Width" Value="120"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,8,0"/>
<Setter Property="Background" Value="#2B6CB0"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderBrush" Value="#2B6CB0"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2C5282"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#1A365D"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="#A0AEC0"/>
<Setter Property="BorderBrush" Value="#A0AEC0"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- ==================== 左侧:相机预览 ==================== -->
<Border Grid.Column="0" Margin="0,0,4,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Padding="10,0">
<Grid>
<TextBlock Text="相机预览" Foreground="#7A8FA6" FontSize="11"
FontWeight="SemiBold" VerticalAlignment="Center"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Ellipse Width="7" Height="7" Fill="#28A745" Margin="0,0,4,0"/>
<TextBlock Text="LIVE" Foreground="#28A745" FontSize="10" FontWeight="Bold"/>
</StackPanel>
</Grid>
</Border>
<ContentControl Grid.Row="1" Content="{Binding CameraAxisViewModelSevice}"/>
</Grid>
</Border>
<!-- ==================== 右侧对位流程3步 ==================== -->
<Grid Grid.Column="1">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
CanContentScroll="False" PanningMode="VerticalOnly" Padding="8,8,8,0">
<StackPanel>
<!-- ====== 步骤1抓Pad点 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="#F7F9FC" BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1" CornerRadius="6,6,0,0" Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2B6CB0" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock Text="第一步抓Pad点目标Pad" Foreground="#2B6CB0" Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<TextBlock Text="框选ROI区域识别Pad目标点坐标" Foreground="#718096" FontSize="11" Margin="6,0,0,8"/>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Pad X1(mm)" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:NumberBox Grid.Column="1" Value="{Binding PadCapturedX}" Style="{StaticResource ReadOnlyNumberBoxStyle}"/>
<TextBlock Grid.Column="2" Text="Pad Y2(mm)" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:NumberBox Grid.Column="3" Value="{Binding PadCapturedY}" Style="{StaticResource ReadOnlyNumberBoxStyle}"/>
<Button Grid.Column="4" Content="抓Pad点" Style="{StaticResource VerifyButtonStyle}" Click="{mw:Action btnCapturePad}"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 步骤2Die网格飞拍 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="#F7F9FC" BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1" CornerRadius="6,6,0,0" Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2B6CB0" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock Text="第二步Die网格飞拍" Foreground="#2B6CB0" Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<TextBlock Text="框选ROI抓Die首点设置飞拍参数后执行网格扫描" Foreground="#718096" FontSize="11" Margin="6,0,0,8"/>
<!-- 首点坐标 + 抓Die首点按钮 -->
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="首点 X2(mm)" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:NumberBox Width="80" Grid.Column="1" Value="{Binding DieFirstX}" Style="{StaticResource ReadOnlyNumberBoxStyle}"/>
<TextBlock Grid.Column="2" Text="首点 Y1(mm)" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:NumberBox Width="80" Grid.Column="3" Value="{Binding DieFirstY}" Style="{StaticResource ReadOnlyNumberBoxStyle}"/>
<Button Grid.Column="4" Content="抓Die首点" Style="{StaticResource VerifyButtonStyle}" Click="{mw:Action btnCaptureDieFirst}"/>
</Grid>
<!-- 飞拍参数 -->
<Grid Margin="0,6,0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="X Count" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:IntNumberBox Grid.Row="0" Grid.Column="1" Value="{Binding FlyScanXCount}" Width="80" Height="28" Margin="6,2"/>
<TextBlock Grid.Row="0" Grid.Column="2" Text="Y Count" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:IntNumberBox Grid.Row="0" Grid.Column="3" Value="{Binding FlyScanYCount}" Width="80" Height="28" Margin="6,2"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Step(mm)" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:NumberBox Grid.Row="1" Grid.Column="1" Value="{Binding FlyScanStep}" Width="80" Height="28" Margin="6,2"/>
</Grid>
<!-- 飞拍按钮 -->
<StackPanel Orientation="Horizontal" Margin="0,6,0,0">
<Button Content="开始飞拍" Style="{StaticResource VerifyButtonStyle}" Click="{mw:Action btnStartFlyScan}"/>
<Button Content="停止" Style="{StaticResource StopButtonStyle}" Click="{mw:Action btnStopAlign}" Width="80"/>
</StackPanel>
<!-- 飞拍结果 -->
<TextBlock Text="{Binding FlyScanResultText}" Foreground="#2D3748" FontSize="12" Margin="6,8,0,4"/>
<DataGrid ItemsSource="{Binding DisplayDieGridPoints}"
AutoGenerateColumns="False"
IsReadOnly="True"
CanUserAddRows="False"
CanUserDeleteRows="False"
Height="120"
Margin="0,2"
FontSize="11"
VerticalScrollBarVisibility="Auto">
<DataGrid.Columns>
<DataGridTextColumn Header="行" Binding="{Binding Row}" Width="50"/>
<DataGridTextColumn Header="列" Binding="{Binding Col}" Width="50"/>
<DataGridTextColumn Header="X2(mm)" Binding="{Binding X, StringFormat=F4}" Width="100"/>
<DataGridTextColumn Header="Y1(mm)" Binding="{Binding Y, StringFormat=F4}" Width="100"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 步骤3对位验证 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="#F7F9FC" BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1" CornerRadius="6,6,0,0" Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#38A169" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock Text="第三步:对位验证" Foreground="#38A169" Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<TextBlock Text="选择Die网格中的一点与Pad点执行对位" Foreground="#718096" FontSize="11" Margin="6,0,0,8"/>
<!-- 行列选择 -->
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="选择行(Row)" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:IntNumberBox Grid.Column="1" Value="{Binding SelectedRow}" Width="80" Height="28" Margin="6,2"/>
<TextBlock Grid.Column="2" Text="选择列(Col)" Style="{StaticResource ParamLabelStyle}" Margin="6,0"/>
<mw:IntNumberBox Grid.Column="3" Value="{Binding SelectedCol}" Width="80" Height="28" Margin="6,2"/>
<Button Grid.Column="4" Content="执行对位" Style="{StaticResource VerifyButtonStyle}" Click="{mw:Action btnExecuteAlign}"/>
</Grid>
<!-- 对位结果 -->
<Border Background="#F7FAFC" BorderBrush="#E2E8F0" BorderThickness="1" CornerRadius="4" Margin="0,8,0,4" Padding="8,6">
<StackPanel>
<TextBlock Text="对位结果" Foreground="#4A5568" FontSize="11" FontWeight="SemiBold" Margin="0,0,0,4"/>
<TextBlock Text="{Binding AlignResultText}" Foreground="#2D3748" FontSize="12" TextWrapping="Wrap"/>
</StackPanel>
</Border>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 进度 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" Visibility="{Binding IsRunning, Converter={StaticResource BoolToVisibilityConverter}}">
<StackPanel Margin="10,8">
<TextBlock Text="{Binding ProgressMessage}" Foreground="#4A5568" FontSize="12"/>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</Grid>
<customControl:LoadingWaitView Grid.ColumnSpan="2" Panel.ZIndex="1000"/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MainShell.PageCalib.AlgorithmCalib.View.FusionCalib
{
/// <summary>
/// FusionAlignVerifyView.xaml 的交互逻辑
/// </summary>
public partial class FusionAlignVerifyView : UserControl
{
public FusionAlignVerifyView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,43 @@
<UserControl x:Class="MainShell.AlgorithmCalib.View.FusionCalibContentsView"
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:local="clr-namespace:MainShell.AlgorithmCalib.View"
xmlns:mw="http://www.maxwell-gp.com/"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="White" BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1" Padding="10,0">
<Grid>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="当前标定:" VerticalAlignment="Center" FontSize="13" Foreground="#7A8FA6"/>
<TextBlock Text="{Binding CurrentCalibName}" VerticalAlignment="Center"
FontSize="13" FontWeight="SemiBold" Foreground="#2D3748" Margin="0,0,16,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<TextBlock Text="{Binding ProgressText}" VerticalAlignment="Center"
FontSize="12" Foreground="#A0AEC0"/>
</StackPanel>
</Grid>
</Border>
<ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<ContentControl mw:View.Model="{Binding ShowScreenVM}"/>
</ScrollViewer>
<Border Grid.Row="2" Background="White" BorderBrush="#E0E4EA"
BorderThickness="0,1,0,0" Padding="8,0">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Button Content="上一个" Margin="5,0" Padding="16,0" Height="32"
Command="{Binding PrevCommand}" IsEnabled="{Binding IsEnablePrev}"/>
<Button Content="下一个" Margin="5,0" Padding="16,0" Height="32"
Command="{Binding NextCommand}" IsEnabled="{Binding IsEnableNext}"/>
</StackPanel>
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MainShell.AlgorithmCalib.View
{
/// <summary>
/// FusionCalibContentsView.xaml 的交互逻辑
/// </summary>
public partial class FusionCalibContentsView : UserControl
{
public FusionCalibContentsView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,358 @@
<UserControl x:Class="MainShell.AlgorithmCalib.View.FusionMultipleCalibView"
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:local="clr-namespace:MainShell.AlgorithmCalib.View"
xmlns:mw="http://www.maxwell-gp.com/"
xmlns:customControl="clr-namespace:MainShell.Resources.CustomControl"
mc:Ignorable="d"
d:DesignHeight="800" d:DesignWidth="1200">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<Style x:Key="ModuleCardStyle" TargetType="Border">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="#E0E4EA"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="6"/>
<Setter Property="Margin" Value="0,0,0,12"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="#000000" Opacity="0.06" BlurRadius="8" ShadowDepth="2" Direction="270"/>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SectionHeaderTextStyle" TargetType="TextBlock">
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="BadgeStyle" TargetType="Border">
<Setter Property="CornerRadius" Value="3"/>
<Setter Property="Padding" Value="5,1"/>
<Setter Property="Margin" Value="3,0"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="SmallActionButtonStyle" TargetType="Button">
<Setter Property="Height" Value="28"/>
<Setter Property="Padding" Value="10,0"/>
<Setter Property="Margin" Value="4,2"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="#EDF2F7" BorderBrush="#CBD5E0"
BorderThickness="1" CornerRadius="4"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="#E2E8F0"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="#CBD5E0"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="bd" Property="Background" Value="#F7FAFC"/>
<Setter TargetName="bd" Property="BorderBrush" Value="#E2E8F0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="StartCalibButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseRoundedButtonStyle}">
<Setter Property="Width" Value="120"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,10,0"/>
<Setter Property="Background" Value="#1A202C"/>
<Setter Property="BorderBrush" Value="#1A202C"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2D3748"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#0F141B"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackground}"/>
<Setter Property="BorderBrush" Value="{StaticResource DisabledBackground}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ModuleWriteButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="4,0"/>
<Setter Property="Background" Value="{StaticResource TeachOrange}"/>
<Setter Property="BorderBrush" Value="{StaticResource TeachOrange}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource TeachOrangeHover}"/>
<Setter Property="BorderBrush" Value="{StaticResource TeachOrangeHover}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{StaticResource TeachOrangePressed}"/>
<Setter Property="BorderBrush" Value="{StaticResource TeachOrangePressed}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackground}"/>
<Setter Property="BorderBrush" Value="{StaticResource DisabledBackground}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- 左侧:相机预览 -->
<Border Grid.Column="0" Margin="0,0,4,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Padding="10,0">
<Grid>
<TextBlock Text="相机预览" Foreground="#7A8FA6" FontSize="11"
FontWeight="SemiBold" VerticalAlignment="Center"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Ellipse Width="7" Height="7" Fill="#28A745" Margin="0,0,4,0"/>
<TextBlock Text="LIVE" Foreground="#28A745" FontSize="10" FontWeight="Bold"/>
</StackPanel>
</Grid>
</Border>
<ContentControl Grid.Row="1" Content="{Binding CameraAxisViewModelService}"/>
</Grid>
</Border>
<!-- 右侧:工具栏 + 标定卡片 -->
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- 顶部工具栏 -->
<Border Grid.Row="0" Background="White" BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1" Padding="8,0">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Button Content="读取标定数据" Command="{mw:Action btnReadCalibData}"
Style="{StaticResource SmallActionButtonStyle}" Width="110" Height="34" Margin="5,0"/>
<Button Content="保存标定数据" Command="{mw:Action btnSaveCalibData}"
Style="{StaticResource SmallActionButtonStyle}" Width="110" Height="34" Margin="5,0"/>
<Button Content="应用标定数据" Command="{mw:Action btnApplyCalibData}"
Style="{StaticResource ModuleWriteButtonStyle}" Width="110" Height="34" Margin="5,0"/>
</StackPanel>
</Border>
<!-- 标定卡片 -->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled" CanContentScroll="False"
PanningMode="VerticalOnly" Padding="8,8,8,0">
<Border Style="{StaticResource ModuleCardStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Header -->
<Border Grid.Row="0" Background="#F7F9FC" BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1" CornerRadius="6,6,0,0" Padding="10,0">
<Grid>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="[] " Foreground="#8892A0" FontSize="14" VerticalAlignment="Center"/>
<TextBlock FontWeight="SemiBold" FontSize="13" Foreground="#2D3748" VerticalAlignment="Center">
<Run Text="融合标定数据"/>
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Border Style="{StaticResource BadgeStyle}" Background="#EDF2F7">
<TextBlock Text="4区域融合" FontSize="10" Foreground="#718096"/>
</Border>
</StackPanel>
</Grid>
</Border>
<!-- Section 1: 标定参数表格 -->
<Border Grid.Row="1" BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1" Padding="10,8">
<StackPanel>
<Grid Margin="0,0,0,6">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock Text="标定区域参数" Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Grid>
<DataGrid ItemsSource="{Binding FusionCalibParItem}"
SelectedItem="{Binding SelectedCalibPar}"
Margin="0,4" Height="200"
AutoGenerateColumns="false" SelectionMode="Single"
CanUserSortColumns="False" HeadersVisibility="Column"
GridLinesVisibility="Horizontal"
HorizontalGridLinesBrush="#F0F4F8"
BorderBrush="#E0E4EA" BorderThickness="1"
RowBackground="White" AlternatingRowBackground="#FAFBFC"
RowHeight="28">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="#F7F9FC"/>
<Setter Property="Foreground" Value="#8892A0"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Padding" Value="8,4"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="BorderBrush" Value="#E0E4EA"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Padding" Value="8,2"/>
<Setter Property="BorderThickness" Value="0"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#EBF5FF"/>
<Setter Property="Foreground" Value="#1568D5"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="序号" IsReadOnly="True" Binding="{Binding Index}" Width="50"/>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<TextBlock Text="Y1(mm)"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource PrimaryTextBrush}"
Text="{Binding MoveAxisPos, StringFormat=F4}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<TextBlock Text="X1(mm)"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource PrimaryTextBrush}"
Text="{Binding ApproachXPos, StringFormat=F4}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<TextBlock Text="Y2(mm)"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource PrimaryTextBrush}"
Text="{Binding ApproachYPos, StringFormat=F4}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<TextBlock Text="StartX(mm)"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource PrimaryTextBrush}"
Text="{Binding StartX, StringFormat=F4}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<TextBlock Text="StartY(mm)"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource PrimaryTextBrush}"
Text="{Binding StartY, StringFormat=F4}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<TextBlock Text="步长(mm)"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource PrimaryTextBrush}"
Text="{Binding Step, StringFormat=F4}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<TextBlock Text="行列数"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource PrimaryTextBrush}"
Text="{Binding Count}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Border>
<!-- Section 2: 操作按钮 -->
<Border Grid.Row="2" BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1" Padding="10,8">
<StackPanel>
<Grid Margin="0,0,0,6">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2B6CB0" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock Text="标定操作" Foreground="#2B6CB0" Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Grid>
<StackPanel Orientation="Horizontal" Margin="0,4">
<Button Content="打开标定窗口" Command="{mw:Action btnOpenCalibWindow}"
Style="{StaticResource StartCalibButtonStyle}" Width="120"/>
<TextBlock Text="选择一行数据后打开对应标定窗口"
Foreground="#A0AEC0" FontSize="11" VerticalAlignment="Center"/>
</StackPanel>
</StackPanel>
</Border>
<!-- Footer -->
<Border Grid.Row="3" BorderBrush="#E0E4EA" BorderThickness="0,1,0,0"
Background="#FAFBFC" CornerRadius="0,0,6,6" Padding="10,0">
<TextBlock Text="共 4 个标定区域" Foreground="#A0AEC0" FontSize="11"
VerticalAlignment="Center"/>
</Border>
</Grid>
</Border>
</ScrollViewer>
</Grid>
<customControl:LoadingWaitView Grid.ColumnSpan="2" Panel.ZIndex="1000"/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MainShell.AlgorithmCalib.View
{
/// <summary>
/// FusionMultipleCalibView.xaml 的交互逻辑
/// </summary>
public partial class FusionMultipleCalibView : UserControl
{
public FusionMultipleCalibView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,711 @@
<UserControl x:Class="MainShell.AlgorithmCalib.View.PadFusionCalibView"
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:local="clr-namespace:MainShell.AlgorithmCalib.View"
xmlns:mw="http://www.maxwell-gp.com/"
xmlns:customControl="clr-namespace:MainShell.Resources.CustomControl"
mc:Ignorable="d"
d:DesignHeight="800" d:DesignWidth="1200"
Loaded="{mw:Action viewLoad}"
Unloaded="{mw:Action viewUnLoad}">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<Style x:Key="VerifyButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#2B6CB0"/>
<Setter Property="BorderBrush" Value="#2B6CB0"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2C5282"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#1A365D"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackground}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ModuleCardStyle" TargetType="Border">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="#E0E4EA"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="6"/>
<Setter Property="Margin" Value="0,0,0,12"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="#000000" Opacity="0.06" BlurRadius="8" ShadowDepth="2"
Direction="270"/>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SectionHeaderTextStyle" TargetType="TextBlock">
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="ParamLabelStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="#4A5568"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
<Style x:Key="ParamNumberBoxStyle" TargetType="mw:NumberBox">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Margin" Value="6,2"/>
<Setter Property="mw:NumericKeypadAttach.IsEnabled" Value="True"/>
<Setter Property="Minimum" Value="-99999"/>
<Setter Property="Maximum" Value="99999"/>
<Setter Property="DecimalPlaces" Value="3"/>
<Setter Property="Foreground" Value="#1568D5"/>
</Style>
<Style x:Key="ReadOnlyNumberBoxStyle" TargetType="mw:NumberBox">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Margin" Value="6,2"/>
<Setter Property="mw:NumericKeypadAttach.IsEnabled" Value="True"/>
<Setter Property="Minimum" Value="-99999"/>
<Setter Property="Maximum" Value="99999"/>
<Setter Property="DecimalPlaces" Value="3"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="Background" Value="#F0F4F8"/>
<Setter Property="Foreground" Value="#4A5568"/>
</Style>
<Style x:Key="IntParamNumberBoxStyle" TargetType="mw:IntNumberBox">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Margin" Value="6,2"/>
<Setter Property="mw:NumericKeypadAttach.IsEnabled" Value="True"/>
<Setter Property="Minimum" Value="0"/>
<Setter Property="Maximum" Value="1000"/>
</Style>
<Style x:Key="SmallActionButtonStyle" TargetType="Button">
<Setter Property="Height" Value="28"/>
<Setter Property="Padding" Value="10,0"/>
<Setter Property="Margin" Value="4,2"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="#EDF2F7" BorderBrush="#CBD5E0"
BorderThickness="1" CornerRadius="4"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="#E2E8F0"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="#CBD5E0"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="bd" Property="Background" Value="#F7FAFC"/>
<Setter TargetName="bd" Property="BorderBrush" Value="#E2E8F0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="StartButtonStyle" TargetType="Button" BasedOn="{StaticResource
BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#1A202C"/>
<Setter Property="BorderBrush" Value="#1A202C"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2D3748"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#0F141B"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackground}"/>
<Setter Property="BorderBrush" Value="{StaticResource DisabledBackground}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="StopButtonStyle" TargetType="Button" BasedOn="{StaticResource
BaseRoundedButtonStyle}">
<Setter Property="Width" Value="110"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Background" Value="#E53E3E"/>
<Setter Property="BorderBrush" Value="#E53E3E"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#C53030"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#9B2C2C"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- ==================== 左侧:相机预览 ==================== -->
<Border Grid.Column="0" Margin="0,0,4,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Padding="10,0">
<Grid>
<TextBlock Text="相机预览"
Foreground="#7A8FA6"
FontSize="11"
FontWeight="SemiBold"
VerticalAlignment="Center"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
VerticalAlignment="Center">
<Ellipse Width="7" Height="7" Fill="#28A745" Margin="0,0,4,0"/>
<TextBlock Text="LIVE" Foreground="#28A745" FontSize="10" FontWeight="Bold"/>
</StackPanel>
</Grid>
</Border>
<ContentControl Grid.Row="1" Content="{Binding CameraAxisViewModelSevice}"/>
</Grid>
</Border>
<!-- ==================== 右侧Tab切换 ==================== -->
<Grid Grid.Column="1">
<TabControl>
<!-- ====== Tab 1标定 ====== -->
<TabItem Header="标定">
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="False"
PanningMode="VerticalOnly"
Padding="8,8,8,0">
<StackPanel>
<!-- ====== 卡片 1PHS运动系标定位置 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#E8821A" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="PHS运动系标定位置"
Foreground="#E8821A"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="PHS平台标定Y1(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.MoveAxisPos, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="80"/>
<Button Grid.Column="2"
Content="移到此位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMovePhsCalibPosPosition}"/>
</Grid>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="X1"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.ApproachXPos}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="80"/>
<TextBlock Grid.Column="2"
Text="Y2"
Style="{StaticResource ParamLabelStyle}"/>
<mw:NumberBox Grid.Column="3"
Value="{Binding FusionCalibParItem.ApproachYPos}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="80"/>
<Button Grid.Column="4"
Content="中心对齐"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnApproachPhsCalibPosition}"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 卡片 2相机起始位置 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="相机起始位置"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="CameraX(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.CameraAxisPos, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<Button Grid.Column="2"
Content="计算位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnCalculateCameraPosition}"/>
<Button Grid.Column="3"
Content="读取当前位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnSetCameraPosition}"/>
<Button Grid.Column="4"
Content="移到此位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveCameraPosition}"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 卡片 3PHS起始位置 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="PHS起始位置"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="StartX(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.StartX}"
Style="{StaticResource ReadOnlyNumberBoxStyle}"
Width="100"/>
<TextBlock Grid.Column="2"
Text="StartY(mm)"
Style="{StaticResource ParamLabelStyle}"/>
<mw:NumberBox Grid.Column="3"
Value="{Binding FusionCalibParItem.StartY}"
Style="{StaticResource ReadOnlyNumberBoxStyle}"
Width="100"/>
</Grid>
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
<Button Content="计算位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnCalculatePhsPosition}"/>
<Button Content="读取当前位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnSetStageStartPosition}"/>
<Button Content="移到此位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveStageStartPosition}"/>
<Button Content="对齐中心"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveToCenter}"/>
</StackPanel>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 卡片 4标定参数 ====== -->
<Border Style="{StaticResource ModuleCardStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="标定参数"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8" IsEnabled="{Binding Motion.IsFinish}">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="WaferStepXY(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.CalibStep, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<TextBlock Grid.Column="2"
Text="WaferCountXY"
Style="{StaticResource ParamLabelStyle}"/>
<mw:IntNumberBox Grid.Column="3"
Value="{Binding FusionCalibParItem.CalibCount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
</Grid>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="StepX1(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.Step, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<TextBlock Grid.Column="2"
Text="CountX1"
Style="{StaticResource ParamLabelStyle}"/>
<mw:IntNumberBox Grid.Column="3"
Value="{Binding FusionCalibParItem.Count, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Minimum="1"
Maximum="10000"
Width="100"/>
</Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
Margin="0,8,0,0">
<Button Content="开始"
Click="{mw:Action btnStart}"
Style="{StaticResource StartButtonStyle}"
IsEnabled="{Binding Motion.IsFinish}"/>
<Button Content="停止"
Click="{mw:Action btnStop}"
Style="{StaticResource StopButtonStyle}"/>
</StackPanel>
</StackPanel>
</Border>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<!-- ====== Tab 2验证 ====== -->
<TabItem Header="验证">
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="False"
PanningMode="VerticalOnly"
Padding="8,8,8,0">
<StackPanel>
<!-- ====== 卡片 1PHS运动系标定位置 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#E8821A" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="PHS运动系标定位置"
Foreground="#E8821A"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="PHS平台标定Y1(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.MoveAxisPos, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="80"/>
<Button Grid.Column="2"
Content="移到此位置"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMovePhsCalibPosPosition}"/>
</Grid>
</StackPanel>
</Border>
</Grid>
</Border>
<!-- ====== 卡片 2PHS运动位置验证 ====== -->
<Border Style="{StaticResource ModuleCardStyle}" IsEnabled="{Binding Motion.IsFinish}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="#F7F9FC"
BorderBrush="#E0E4EA"
BorderThickness="0,0,0,1"
CornerRadius="6,6,0,0"
Padding="10,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Fill="#2D3748" VerticalAlignment="Center"
Margin="0,0,5,0"/>
<TextBlock Text="PHS运动位置"
Style="{StaticResource SectionHeaderTextStyle}"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Padding="10,8">
<StackPanel>
<!-- 起点坐标 -->
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="StartX(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.WaferStartVerifyX}"
Style="{StaticResource ReadOnlyNumberBoxStyle}"
Width="100"/>
<TextBlock Grid.Column="2"
Text="StartY(mm)"
Style="{StaticResource ParamLabelStyle}"/>
<mw:NumberBox Grid.Column="3"
Value="{Binding FusionCalibParItem.WaferStartVerifyY}"
Style="{StaticResource ReadOnlyNumberBoxStyle}"
Width="100"/>
</Grid>
<!-- 设置起点 -->
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
<Button Content="设置起点"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveToCenter}"/>
</StackPanel>
<!-- Step + 移动到起点 -->
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="Step(mm)"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:NumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.WaferVerityStep}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<Button Grid.Column="2"
Content="移动到起点"
Style="{StaticResource SmallActionButtonStyle}"
Click="{mw:Action btnMoveToStartPoint}"/>
</Grid>
<!-- Count X / Y -->
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="CountX"
Style="{StaticResource ParamLabelStyle}"
Margin="6,0"/>
<mw:IntNumberBox Grid.Column="1"
Value="{Binding FusionCalibParItem.WaferVerityCountX}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
<TextBlock Grid.Column="2"
Text="CountY"
Style="{StaticResource ParamLabelStyle}"/>
<mw:IntNumberBox Grid.Column="3"
Value="{Binding FusionCalibParItem.WaferVerityCountY}"
mw:NumericKeypadAttach.IsEnabled="True"
Width="100"/>
</Grid>
<!-- 飞拍 + 验证按钮 -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
Margin="0,8,0,0">
<Button Content="开始飞拍"
Click="{mw:Action btnMoveWafer}"
Style="{StaticResource StartButtonStyle}"
IsEnabled="{Binding Motion.IsFinish}"/>
<Button Content="以当前相机位置验证"
Click="{mw:Action btnVerityWafer}"
Style="{StaticResource VerifyButtonStyle}"
Width="150"
IsEnabled="{Binding Motion.IsFinish}"/>
<Button Content="停止"
Click="{mw:Action btnStopVerityWafer}"
Style="{StaticResource StopButtonStyle}"/>
</StackPanel>
</StackPanel>
</Border>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
</TabControl>
</Grid>
<customControl:LoadingWaitView Grid.ColumnSpan="2" Panel.ZIndex="1000"/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MainShell.AlgorithmCalib.View
{
/// <summary>
/// PadFusionCalibView.xaml 的交互逻辑
/// </summary>
public partial class PadFusionCalibView : UserControl
{
public PadFusionCalibView()
{
InitializeComponent();
}
}
}