添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.ChipStraighteningView"
|
||||
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/"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<UserControl.Resources>
|
||||
<ResourceDictionary>
|
||||
<Style x:Key="ChipStraighteningCardStyle" TargetType="GroupBox" BasedOn="{StaticResource ProcessCardGroupBoxStyle}">
|
||||
<Setter Property="Width" Value="320"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ChipStraighteningLabelStyle" TargetType="Label" BasedOn="{StaticResource ProcessLabelStyle}">
|
||||
<Setter Property="Width" Value="82"/>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid Background="{StaticResource ProcessPageBackgroundBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Style="{StaticResource ProcessCameraHostBorderStyle}">
|
||||
<ContentControl Content="{Binding CameraAxisViewModel}" IsEnabled="{Binding Runner.IsRunning,Converter={StaticResource boolToInversionConverter}}"/>
|
||||
</Border>
|
||||
<GroupBox Grid.Column="1" Margin="0,4,4,4" Header="{DynamicResource ChipStraightening}" Style="{StaticResource ProcessWideCardGroupBoxStyle}">
|
||||
<Grid Margin="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
<RowDefinition Height="60"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<GroupBox Style="{StaticResource ChipStraighteningCardStyle}" Header="{DynamicResource ChipAngle}">
|
||||
<StackPanel>
|
||||
<StackPanel Style="{StaticResource ProcessParameterRowStyle}">
|
||||
<Label Style="{StaticResource ChipStraighteningLabelStyle}" Content="{DynamicResource ChipAngle}"/>
|
||||
<mw:NumberBox Style="{StaticResource ProcessLargeNumberBoxStyle}" IsReadOnly="True" Value="{Binding ChipAngle}"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</GroupBox>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="1" Margin="0,8,0,0">
|
||||
<Button Content="{DynamicResource Start}" Click="{mw:Action StartProcess}" Style="{StaticResource StartButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}" />
|
||||
<Button Content="{DynamicResource Stop}" Click="{mw:Action StopProcess}" Style="{StaticResource StopButtonStyle }" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -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.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// ChipStraighteningView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class ChipStraighteningView : UserControl
|
||||
{
|
||||
public ChipStraighteningView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.DieBondingView"
|
||||
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"
|
||||
xmlns:conv="clr-namespace:MainShell.Converter"
|
||||
xmlns:common="clr-namespace:MainShell.Common"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<UserControl.Resources>
|
||||
<ResourceDictionary>
|
||||
<conv:EnumBindingSourceExtension x:Key="TransPathType" UseDescription="True" EnumType="{x:Type common:TransPathType}" />
|
||||
<conv:EnumBindingSourceExtension x:Key="DieTransferRowTraversalStrategy" UseDescription="True" EnumType="{x:Type common:DieTransferRowTraversalStrategy}" />
|
||||
|
||||
<Style x:Key="DieBondingTextStyle" TargetType="TextBlock" BasedOn="{StaticResource ProcessReadOnlyValueTextStyle}">
|
||||
<Setter Property="Width" Value="128"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DieBondingComboStyle" TargetType="ComboBox" BasedOn="{StaticResource ProcessComboBoxStyle}">
|
||||
<Setter Property="Width" Value="180"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DieBondingPathButtonStyle" TargetType="Button" BasedOn="{StaticResource CommonButtonStyle}">
|
||||
<Setter Property="Margin" Value="4,2"/>
|
||||
<Setter Property="MinWidth" Value="120"/>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
<Grid Background="{StaticResource ProcessPageBackgroundBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Style="{StaticResource ProcessCameraHostBorderStyle}">
|
||||
<ContentControl Content="{Binding CameraAxisViewModel}" />
|
||||
</Border>
|
||||
<TabControl Grid.Column="1" Margin="0,4,4,4" Style="{StaticResource ProcessTabControlStyle}">
|
||||
<TabItem Header="{DynamicResource DieBondingSet}">
|
||||
<Grid Margin="4">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<custom:RegionEditorView Title="{DynamicResource SubstrateRegion}" Margin="0,0,0,18"/>
|
||||
<custom:RegionEditorView Title="{DynamicResource WaferRegion}" Margin="0,0,0,18"/>
|
||||
<GroupBox Header="{DynamicResource GenerateSet}" Style="{StaticResource ProcessWideCardGroupBoxStyle}">
|
||||
<StackPanel>
|
||||
<StackPanel Style="{StaticResource ProcessParameterRowStyle}">
|
||||
<TextBlock Text="{DynamicResource DieBondingGenerateModeLabel}" Style="{StaticResource DieBondingTextStyle}"/>
|
||||
<ComboBox Style="{StaticResource DieBondingComboStyle}"
|
||||
SelectedValuePath="Value"
|
||||
ItemsSource="{StaticResource TransPathType}"
|
||||
SelectedValue="{Binding DieBondingManualSysItem.TransPathType, Mode=TwoWay}"
|
||||
DisplayMemberPath="Description"/>
|
||||
</StackPanel>
|
||||
<StackPanel Style="{StaticResource ProcessParameterRowStyle}">
|
||||
<TextBlock Text="{DynamicResource DieBondingPadRowDirectionLabel}" Style="{StaticResource DieBondingTextStyle}"/>
|
||||
<ComboBox Style="{StaticResource DieBondingComboStyle}"
|
||||
SelectedValuePath="Value"
|
||||
ItemsSource="{StaticResource DieTransferRowTraversalStrategy}"
|
||||
SelectedValue="{Binding DieBondingManualSysItem.PadRowDirectionStrategy, Mode=TwoWay}"
|
||||
DisplayMemberPath="Description"/>
|
||||
</StackPanel>
|
||||
<StackPanel Style="{StaticResource ProcessParameterRowStyle}">
|
||||
<TextBlock Text="{DynamicResource DieBondingDieRowDirectionLabel}" Style="{StaticResource DieBondingTextStyle}"/>
|
||||
<ComboBox Style="{StaticResource DieBondingComboStyle}"
|
||||
SelectedValuePath="Value"
|
||||
ItemsSource="{StaticResource DieTransferRowTraversalStrategy}"
|
||||
SelectedValue="{Binding DieBondingManualSysItem.DieRowDirectionStrategy, Mode=TwoWay}"
|
||||
DisplayMemberPath="Description"/>
|
||||
</StackPanel>
|
||||
<StackPanel Style="{StaticResource ProcessParameterRowStyle}">
|
||||
<TextBlock Text="{DynamicResource DieBondingAutoCalculateDieLabel}" Style="{StaticResource DieBondingTextStyle}"/>
|
||||
<ToggleButton Style="{StaticResource ProcessSmallToggleStyle}" Content="{DynamicResource EnabledLabel}"
|
||||
IsChecked="{Binding DieBondingManualSysItem.AutoDieRegionModeEnable, Mode=TwoWay}"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</GroupBox>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="1" Margin="0,8,0,0">
|
||||
<Button Content="{DynamicResource Start}" Click="{mw:Action StartProcess}" Style="{StaticResource StartButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}" />
|
||||
<Button Content="{DynamicResource Stop}" Click="{mw:Action StopProcess}" Style="{StaticResource StopButtonStyle }" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning}" />
|
||||
<Button Content="{DynamicResource Save}" Click="{mw:Action SaveDieBondingSetAsync}" Style="{StaticResource SaveButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
<TabItem Header="{DynamicResource DieBondingPath}">
|
||||
<Grid Margin="4">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<DataGrid Style="{StaticResource ProcessDataGridStyle}"
|
||||
ItemsSource="{Binding DieTransferPathItems}"
|
||||
SelectedItem="{Binding SelectedDieTransferPathItem, Mode=TwoWay}"
|
||||
IsReadOnly="True"
|
||||
SelectionUnit="FullRow"
|
||||
SelectionMode="Single"
|
||||
LoadingRow="DataGrid_LoadingRow">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="{DynamicResource DieBondingSequenceNumberHeader}" Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow},
|
||||
Path=Header}" Width="*"/>
|
||||
<DataGridTextColumn Header="{DynamicResource DieBondingSubstrateRowHeader}" Binding="{Binding PadRow}" Width="*"/>
|
||||
<DataGridTextColumn Header="{DynamicResource DieBondingSubstrateColumnHeader}" Binding="{Binding PadColumn}" Width="*"/>
|
||||
<DataGridTextColumn Header="{DynamicResource DieBondingWaferRowHeader}" Binding="{Binding DieRow}" Width="*"/>
|
||||
<DataGridTextColumn Header="{DynamicResource DieBondingWaferColumnHeader}" Binding="{Binding DieColumn}" Width="*"/>
|
||||
<DataGridTextColumn Header="{DynamicResource DieBondingTypeHeader}" Binding="{Binding TransPathType, Converter={StaticResource EnumDescriptionConverter}}" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<custom:PaginationControl DataContext="{Binding Pagination}" Grid.Row="1" Margin="0,10,0,0"/>
|
||||
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal" Margin="2" Grid.Row="2">
|
||||
<Button Style="{StaticResource DieBondingPathButtonStyle}"
|
||||
Content="{DynamicResource DieBondingMoveToDieButton}"
|
||||
IsEnabled="{Binding SelectedDieTransferPathItem, Converter={StaticResource ObjectToBoolConverter}}" />
|
||||
<Button Style="{StaticResource DieBondingPathButtonStyle}"
|
||||
Content="{DynamicResource DieBondingMoveToPadButton}"
|
||||
IsEnabled="{Binding SelectedDieTransferPathItem, Converter={StaticResource ObjectToBoolConverter}}" />
|
||||
<Button Style="{StaticResource DieBondingPathButtonStyle}"
|
||||
Content="{DynamicResource DieBondingAlignDieToPadButton}"
|
||||
IsEnabled="{Binding SelectedDieTransferPathItem, Converter={StaticResource ObjectToBoolConverter}}" />
|
||||
<Button Style="{StaticResource DieBondingPathButtonStyle}" Content="{DynamicResource DieBondingGeneratePathButton}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,34 @@
|
||||
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.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// DieBondingView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DieBondingView : UserControl
|
||||
{
|
||||
public DieBondingView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
|
||||
{
|
||||
// 每次行加载时,将当前索引 + 1 赋值给 Header
|
||||
e.Row.Header = (e.Row.GetIndex() + 1).ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.DiePositionView"
|
||||
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="450" d:DesignWidth="800">
|
||||
<UserControl.Resources>
|
||||
<ResourceDictionary>
|
||||
<Style x:Key="DiePositionStatLabelStyle" TargetType="TextBlock" BasedOn="{StaticResource ProcessReadOnlyValueTextStyle}">
|
||||
<Setter Property="Width" Value="118"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DiePositionStatValueStyle" TargetType="TextBox" BasedOn="{StaticResource ProcessTextBoxStyle}">
|
||||
<Setter Property="Width" Value="88"/>
|
||||
<Setter Property="MinWidth" Value="88"/>
|
||||
<Setter Property="Margin" Value="8,0,0,0"/>
|
||||
<Setter Property="FontWeight" Value="Bold"/>
|
||||
<Setter Property="FontSize" Value="15"/>
|
||||
<Setter Property="TextAlignment" Value="Center"/>
|
||||
<Setter Property="IsReadOnly" Value="True"/>
|
||||
<Setter Property="Foreground" Value="#00A651"/>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid Background="{StaticResource ProcessPageBackgroundBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Style="{StaticResource ProcessCameraHostBorderStyle}">
|
||||
<ContentControl Content="{Binding CameraAxisViewModel}" />
|
||||
</Border>
|
||||
<ScrollViewer Grid.Column="1"
|
||||
Margin="0,4,4,4"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
CanContentScroll="False">
|
||||
<GroupBox Header="{DynamicResource DiePosition}" Style="{StaticResource ProcessWideCardGroupBoxStyle}">
|
||||
<Grid Margin="0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<GroupBox Style="{StaticResource ProcessWideCardGroupBoxStyle}" MinHeight="120" Header="{DynamicResource DiePositionStatistics}">
|
||||
<Grid Margin="0" VerticalAlignment="Center">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid Grid.Row="0" Grid.Column="0" Margin="4,2,14,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource DiePositionTotalDieCountLabel}" Style="{StaticResource DiePositionStatLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding Statistics.TotalDieCount, Mode=OneWay}" Style="{StaticResource DiePositionStatValueStyle}" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="0" Grid.Column="1" Margin="4,2,0,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource DiePositionPassRateLabel}" Style="{StaticResource DiePositionStatLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding Statistics.PassRate, StringFormat={}{0:F2}%, Mode=OneWay}" Style="{StaticResource DiePositionStatValueStyle}" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" Grid.Column="0" Margin="4,2,14,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource DiePositionOkDieCountLabel}" Style="{StaticResource DiePositionStatLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding Statistics.OkDieCount, Mode=OneWay}" Style="{StaticResource DiePositionStatValueStyle}" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="1" Grid.Column="1" Margin="4,2,0,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource DiePositionNgDieCountLabel}" Style="{StaticResource DiePositionStatLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding Statistics.NgDieCount, Mode=OneWay}" HorizontalAlignment="Left">
|
||||
<TextBox.Style>
|
||||
<Style TargetType="TextBox" BasedOn="{StaticResource DiePositionStatValueStyle}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Statistics.NgDieCount}" Value="0">
|
||||
<Setter Property="Foreground" Value="#00A651"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding Statistics.NgDieCount, Converter={StaticResource ObjectToBoolConverter}}" Value="True">
|
||||
<Setter Property="Foreground" Value="Red"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBox.Style>
|
||||
</TextBox>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="2" Grid.Column="0" Margin="4,2,14,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource DiePositionAverageSpacingXLabel}" Style="{StaticResource DiePositionStatLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding Statistics.AverageSpacingX, StringFormat={}{0:F3}, Mode=OneWay}" Style="{StaticResource DiePositionStatValueStyle}" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
<Grid Grid.Row="2" Grid.Column="1" Margin="4,2,0,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource DiePositionAverageSpacingYLabel}" Style="{StaticResource DiePositionStatLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding Statistics.AverageSpacingY, StringFormat={}{0:F3}, Mode=OneWay}" Style="{StaticResource DiePositionStatValueStyle}" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
<GroupBox Style="{StaticResource ProcessWideCardGroupBoxStyle}" Header="{DynamicResource DiePositionMap}" Margin="0,0,0,0" Height="300">
|
||||
<custom:DieMapPanelControl MapModel="{Binding DieMapModel}"
|
||||
DieSize="20"
|
||||
Spacing="2"
|
||||
MapBackground="#E5E7EB"
|
||||
MapMargin="8"
|
||||
Caption=""/>
|
||||
</GroupBox>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="1" Margin="0,8,0,0">
|
||||
<Button Content="{DynamicResource Start}" Click="{mw:Action StartProcess}" Style="{StaticResource StartButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}" />
|
||||
<Button Content="{DynamicResource Stop}" Click="{mw:Action StopProcess}" Style="{StaticResource StopButtonStyle }" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace MainShell.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// DiePositionView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DiePositionView : UserControl
|
||||
{
|
||||
public DiePositionView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.DieRecheckView"
|
||||
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:behavior="clr-namespace:MainShell.Common.ControlAttribute"
|
||||
xmlns:custom="clr-namespace:MainShell.Resources.CustomControl"
|
||||
xmlns:mw="http://www.maxwell-gp.com/"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<UserControl.Resources>
|
||||
<ResourceDictionary>
|
||||
<Style x:Key="DieRecheckActionButtonStyle" TargetType="Button" BasedOn="{StaticResource CommonButtonStyle}">
|
||||
<Setter Property="Margin" Value="3,2"/>
|
||||
<Setter Property="MinWidth" Value="110"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DieRecheckSectionTitleStyle" TargetType="TextBlock" BasedOn="{StaticResource ProcessReadOnlyValueTextStyle}">
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
<Setter Property="Margin" Value="0,0,0,6"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DieRecheckThresholdCardStyle" TargetType="Border">
|
||||
<Setter Property="Background" Value="White"/>
|
||||
<Setter Property="BorderBrush" Value="#D8E0EC"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
<Setter Property="CornerRadius" Value="8"/>
|
||||
<Setter Property="Padding" Value="12,10"/>
|
||||
<Setter Property="Margin" Value="0,0,8,0"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DieRecheckThresholdLabelStyle" TargetType="TextBlock" BasedOn="{StaticResource ProcessReadOnlyValueTextStyle}">
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
<Setter Property="Margin" Value="0,0,0,6"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DieRecheckRuleListBorderStyle" TargetType="Border">
|
||||
<Setter Property="Background" Value="White"/>
|
||||
<Setter Property="BorderBrush" Value="#D8E0EC"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
<Setter Property="CornerRadius" Value="8"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DieRecheckRuleItemBorderStyle" TargetType="Border">
|
||||
<Setter Property="Padding" Value="12,10"/>
|
||||
<Setter Property="BorderBrush" Value="#E7ECF4"/>
|
||||
<Setter Property="BorderThickness" Value="0,0,0,1"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="DieRecheckRuleRadioStyle" TargetType="RadioButton">
|
||||
<Setter Property="FontSize" Value="13"/>
|
||||
<Setter Property="Foreground" Value="#425466"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="RadioButton">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Grid Width="18" Height="18" Margin="0,0,10,0">
|
||||
<Ellipse Stroke="#B8C6DA" StrokeThickness="2" Fill="White"/>
|
||||
<Ellipse x:Name="InnerDot" Width="8" Height="8" Fill="#3D7DFF" Visibility="Collapsed" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
<ContentPresenter VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsChecked" Value="True">
|
||||
<Setter TargetName="InnerDot" Property="Visibility" Value="Visible"/>
|
||||
</Trigger>
|
||||
<Trigger Property="IsEnabled" Value="False">
|
||||
<Setter Property="Opacity" Value="0.5"/>
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid Background="{StaticResource ProcessPageBackgroundBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Style="{StaticResource ProcessCameraHostBorderStyle}">
|
||||
<ContentControl Content="{Binding CameraAxisViewModel}" />
|
||||
</Border>
|
||||
<ScrollViewer Grid.Column="1"
|
||||
Margin="0,4,4,4"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
Style="{StaticResource ProcessScrollViewerStyle}"
|
||||
CanContentScroll="False">
|
||||
<Grid Margin="2">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<custom:RegionEditorView Title="{DynamicResource DieRecheckRegionEditorTitle}"
|
||||
DataContext="{Binding RecheckRegion}"/>
|
||||
|
||||
|
||||
<GroupBox Grid.Row="1" Header="{DynamicResource DieRecheckFunctionGroup}" Style="{StaticResource ProcessWideCardGroupBoxStyle}" Margin="0,6,0,0">
|
||||
<StackPanel>
|
||||
<TextBlock Text="{DynamicResource DieRecheckThresholdSectionTitle}" Style="{StaticResource DieRecheckSectionTitleStyle}"/>
|
||||
<Grid Margin="0,0,0,8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Border Grid.Column="0" Style="{StaticResource DieRecheckThresholdCardStyle}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{DynamicResource DieRecheckXThresholdSetting}" Style="{StaticResource DieRecheckThresholdLabelStyle}"/>
|
||||
<TextBox Style="{StaticResource ProcessTextBoxStyle}"
|
||||
behavior:ControlBehavior.IsNumericOnly="True"
|
||||
Text="{Binding FilterState.XThreshold, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F4}}"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="1" Style="{StaticResource DieRecheckThresholdCardStyle}" Margin="8,0,0,0">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{DynamicResource DieRecheckYThresholdSetting}" Style="{StaticResource DieRecheckThresholdLabelStyle}"/>
|
||||
<TextBox Style="{StaticResource ProcessTextBoxStyle}"
|
||||
behavior:ControlBehavior.IsNumericOnly="True"
|
||||
Text="{Binding FilterState.YThreshold, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F4}}"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<TextBlock Text="{DynamicResource DieRecheckRuleSectionTitle}" Style="{StaticResource DieRecheckSectionTitleStyle}"/>
|
||||
<Border Style="{StaticResource DieRecheckRuleListBorderStyle}" Margin="0,0,0,6">
|
||||
<StackPanel>
|
||||
<Border Style="{StaticResource DieRecheckRuleItemBorderStyle}">
|
||||
<RadioButton Style="{StaticResource DieRecheckRuleRadioStyle}"
|
||||
GroupName="DieRecheckFilterRule"
|
||||
Content="{DynamicResource DieRecheckFilterMissingBond}"
|
||||
IsChecked="{Binding FilterState.IsMissingBondRuleSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
|
||||
</Border>
|
||||
<Border Style="{StaticResource DieRecheckRuleItemBorderStyle}">
|
||||
<RadioButton Style="{StaticResource DieRecheckRuleRadioStyle}"
|
||||
GroupName="DieRecheckFilterRule"
|
||||
IsChecked="{Binding FilterState.IsXThresholdRuleSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
|
||||
<TextBlock>
|
||||
<Run Text="{DynamicResource DieRecheckFilterXThreshold}"/>
|
||||
<Run Text=" ("/>
|
||||
<Run Text="{Binding FilterState.XThreshold, StringFormat={}{0:F4}}"/>
|
||||
<Run Text=")"/>
|
||||
</TextBlock>
|
||||
</RadioButton>
|
||||
</Border>
|
||||
<Border Style="{StaticResource DieRecheckRuleItemBorderStyle}">
|
||||
<RadioButton Style="{StaticResource DieRecheckRuleRadioStyle}"
|
||||
GroupName="DieRecheckFilterRule"
|
||||
IsChecked="{Binding FilterState.IsYThresholdRuleSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
|
||||
<TextBlock>
|
||||
<Run Text="{DynamicResource DieRecheckFilterYThreshold}"/>
|
||||
<Run Text=" ("/>
|
||||
<Run Text="{Binding FilterState.YThreshold, StringFormat={}{0:F4}}"/>
|
||||
<Run Text=")"/>
|
||||
</TextBlock>
|
||||
</RadioButton>
|
||||
</Border>
|
||||
<Border Padding="12,10">
|
||||
<RadioButton Style="{StaticResource DieRecheckRuleRadioStyle}"
|
||||
GroupName="DieRecheckFilterRule"
|
||||
Content="{DynamicResource DieRecheckFilterXYThreshold}"
|
||||
IsChecked="{Binding FilterState.IsXYThresholdRuleSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<WrapPanel HorizontalAlignment="Center">
|
||||
<Button Style="{StaticResource DieRecheckActionButtonStyle}"
|
||||
Content="{DynamicResource DieRecheckMoveToSelectedPoint}"
|
||||
Click="{mw:Action MoveToSelectedPoint}"
|
||||
IsEnabled="{Binding SelectedPointResult, Converter={StaticResource ObjectToBoolConverter}}"/>
|
||||
<Button Style="{StaticResource DieRecheckActionButtonStyle}"
|
||||
Content="{DynamicResource DieRecheckResetFilters}"
|
||||
Click="{mw:Action ResetFilters}"/>
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Grid.Row="2" Header="{DynamicResource DieRecheckCurrentPoints}" Style="{StaticResource ProcessWideCardGroupBoxStyle}" Margin="0,6,0,0">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<DataGrid Grid.Row="0"
|
||||
Style="{StaticResource ProcessDataGridStyle}"
|
||||
AutoGenerateColumns="False"
|
||||
IsReadOnly="True"
|
||||
CanUserAddRows="False"
|
||||
ItemsSource="{Binding PointResults}"
|
||||
SelectedItem="{Binding SelectedPointResult, Mode=TwoWay}"
|
||||
SelectionUnit="FullRow"
|
||||
SelectionMode="Single"
|
||||
Height="320"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Auto"
|
||||
MinHeight="260">
|
||||
<DataGrid.Resources>
|
||||
<Style TargetType="{x:Type ScrollViewer}" BasedOn="{StaticResource ProcessScrollViewerStyle}"/>
|
||||
</DataGrid.Resources>
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckStepIndex}" Binding="{Binding StepIndex}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckPadRow}" Binding="{Binding PadRow}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckPadColumn}" Binding="{Binding PadColumn}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckDieRow}" Binding="{Binding DieRow}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckDieColumn}" Binding="{Binding DieColumn}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckXError}" Binding="{Binding XError, StringFormat={}{0:F4}}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckYError}" Binding="{Binding YError, StringFormat={}{0:F4}}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckStatus}" Binding="{Binding StatusSummary}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource DieRecheckType}" Binding="{Binding TransPathType}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<custom:PaginationControl Grid.Row="1" DataContext="{Binding Pagination}" Margin="0,10,0,0"/>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
|
||||
<StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,8,0,0">
|
||||
<Button Content="{DynamicResource Start}" Click="{mw:Action StartProcess}" Style="{StaticResource StartButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}" />
|
||||
<Button Content="{DynamicResource Stop}" Click="{mw:Action StopProcess}" Style="{StaticResource StopButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace MainShell.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// DieRecheckView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class DieRecheckView : UserControl
|
||||
{
|
||||
public DieRecheckView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,358 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.LogisticsOperationView"
|
||||
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:custom="clr-namespace:MainShell.Resources.CustomControl"
|
||||
xmlns:mw="http://www.maxwell-gp.com/"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<UserControl.Resources>
|
||||
<Style x:Key="PanelBorderStyle" TargetType="Border">
|
||||
<Setter Property="Background" Value="#F8FAFD"/>
|
||||
<Setter Property="BorderBrush" Value="#D4DCE8"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
<Setter Property="CornerRadius" Value="6"/>
|
||||
<Setter Property="Margin" Value="6"/>
|
||||
<Setter Property="Padding" Value="12"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="IndicatorDotStyle" TargetType="Ellipse">
|
||||
<Setter Property="Width" Value="11"/>
|
||||
<Setter Property="Height" Value="11"/>
|
||||
<Setter Property="Fill" Value="#CBD5E1"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsOn}" Value="True">
|
||||
<Setter Property="Fill" Value="#22C55E"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="PhaseCardBorderStyle" TargetType="Border">
|
||||
<Setter Property="BorderBrush" Value="#C9D6EA"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
<Setter Property="CornerRadius" Value="3"/>
|
||||
<Setter Property="Padding" Value="8"/>
|
||||
<Setter Property="Margin" Value="0,0,0,6"/>
|
||||
<Setter Property="Background" Value="#F2F6FC"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="PhaseActionButtonStyle" TargetType="Button" BasedOn="{StaticResource LogisticsActionButtonStyle}">
|
||||
<Setter Property="Width" Value="190"/>
|
||||
<Setter Property="Height" Value="36"/>
|
||||
<Setter Property="Margin" Value="0,4,0,0"/>
|
||||
</Style>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid Background="#EDF1F7">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="290"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid Grid.Column="0" Margin="2">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Border Style="{StaticResource PanelBorderStyle}">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.SubstrateLoad.Title}" FontWeight="Bold" FontSize="18" Foreground="#0F3B7A"/>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<Ellipse Width="12" Height="12" Fill="#22C55E" Margin="0,0,6,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<Separator Grid.Row="1" Margin="0,8,0,10"/>
|
||||
|
||||
<ItemsControl Grid.Row="2" ItemsSource="{Binding State.SubstrateLoad.Indicators}" VerticalAlignment="Top">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="2"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,4">
|
||||
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" Foreground="#20354C"/>
|
||||
<Ellipse Style="{StaticResource IndicatorDotStyle}" Margin="6,0,0,0"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
|
||||
<StackPanel Grid.Row="3" Margin="0,10,0,0">
|
||||
<Button Content="{Binding State.SubstrateLoad.PrimaryActionText}" Style="{StaticResource LogisticsActionButtonStyle}"/>
|
||||
<Button Content="{Binding State.SubstrateLoad.SecondaryActionText}" Style="{StaticResource LogisticsSecondaryButtonStyle}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="1" Style="{StaticResource PanelBorderStyle}">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.ChipLoad.Title}" FontWeight="Bold" FontSize="18" Foreground="#0F3B7A"/>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<CheckBox Content="无EFEM调试" IsChecked="{Binding State.IsManualWithoutEfem}" Margin="0,0,10,0" Foreground="#6B7C95"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<Separator Grid.Row="1" Margin="0,8,0,10"/>
|
||||
|
||||
<StackPanel Grid.Row="2" VerticalAlignment="Top">
|
||||
<Border Style="{StaticResource PhaseCardBorderStyle}" IsEnabled="{Binding State.IsManualWithoutEfem, Converter={StaticResource boolToInversionConverter}}">
|
||||
<StackPanel>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.ChipLoad.PhaseSteps[0].Title}" Foreground="#2455C7" FontWeight="Bold"/>
|
||||
</Grid>
|
||||
<Button Content="{Binding State.ChipLoad.PhaseSteps[0].ActionText}"
|
||||
Style="{StaticResource PhaseActionButtonStyle}"
|
||||
IsEnabled="{Binding State.ChipLoad.PhaseSteps[0].IsEnabled}"
|
||||
Click="{mw:Action ChipLoadPhase1Async}"/>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
|
||||
<TextBlock Text="料盒层数" VerticalAlignment="Center" Foreground="#5B6B83" Margin="0,0,6,0"/>
|
||||
<mw:IntNumberBox Minimum="1" Maximum="25" Width="60"
|
||||
Value="{Binding State.ChipLoad.PhaseSteps[0].TargetLayer}"
|
||||
mw:NumericKeypadAttach.IsEnabled="True"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource PhaseCardBorderStyle}">
|
||||
<StackPanel>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.ChipLoad.PhaseSteps[1].Title}" Foreground="#96A1B3" FontWeight="Bold"/>
|
||||
</Grid>
|
||||
<Button Content="{Binding State.ChipLoad.PhaseSteps[1].ActionText}"
|
||||
Style="{StaticResource PhaseActionButtonStyle}"
|
||||
IsEnabled="{Binding State.ChipLoad.PhaseSteps[1].IsEnabled}"
|
||||
Click="{mw:Action ChipLoadPhase2Async}"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<ItemsControl ItemsSource="{Binding State.ChipLoad.Indicators}" VerticalAlignment="Top">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="2"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,4">
|
||||
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" Foreground="#20354C"/>
|
||||
<Ellipse Style="{StaticResource IndicatorDotStyle}" Margin="6,0,0,0"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="3" Margin="0,8,0,0">
|
||||
<Button Content="{Binding State.ChipLoad.SecondaryActionText}" Style="{StaticResource LogisticsSecondaryButtonStyle}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Row="1" Style="{StaticResource PanelBorderStyle}">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.SubstrateOut.Title}" FontWeight="Bold" FontSize="18" Foreground="#0F3B7A"/>
|
||||
<Ellipse Grid.Column="1" Width="12" Height="12" Fill="#CBD5E1" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
<Separator Grid.Row="1" Margin="0,8,0,10"/>
|
||||
|
||||
<ItemsControl Grid.Row="2" ItemsSource="{Binding State.SubstrateOut.Indicators}" VerticalAlignment="Top">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="2"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,4">
|
||||
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" Foreground="#20354C"/>
|
||||
<Ellipse Style="{StaticResource IndicatorDotStyle}" Margin="6,0,0,0"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
|
||||
<StackPanel Grid.Row="3" Margin="0,10,0,0">
|
||||
<Button Content="{Binding State.SubstrateOut.PrimaryActionText}" Style="{StaticResource LogisticsOutlineActionButtonStyle}"/>
|
||||
<Button Content="{Binding State.SubstrateOut.SecondaryActionText}" Style="{StaticResource LogisticsSecondaryButtonStyle}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Row="1" Grid.Column="1" Style="{StaticResource PanelBorderStyle}">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.ChipUnload.Title}" FontWeight="Bold" FontSize="18" Foreground="#0F3B7A"/>
|
||||
</Grid>
|
||||
<Separator Grid.Row="1" Margin="0,8,0,10"/>
|
||||
|
||||
<StackPanel Grid.Row="2" VerticalAlignment="Top">
|
||||
<Border Style="{StaticResource PhaseCardBorderStyle}">
|
||||
<StackPanel>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.ChipUnload.PhaseSteps[0].Title}" Foreground="#D17A00" FontWeight="Bold"/>
|
||||
</Grid>
|
||||
<Button Content="{Binding State.ChipUnload.PhaseSteps[0].ActionText}"
|
||||
Style="{StaticResource LogisticsWarningActionButtonStyle}"
|
||||
IsEnabled="{Binding State.ChipUnload.PhaseSteps[0].IsEnabled}"
|
||||
Click="{mw:Action ChipUnloadPhase1Async}"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource PhaseCardBorderStyle}" IsEnabled="{Binding State.IsManualWithoutEfem, Converter={StaticResource boolToInversionConverter}}">
|
||||
<StackPanel>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.ChipUnload.PhaseSteps[1].Title}" Foreground="#96A1B3" FontWeight="Bold"/>
|
||||
</Grid>
|
||||
<Button Content="{Binding State.ChipUnload.PhaseSteps[1].ActionText}"
|
||||
Style="{StaticResource PhaseActionButtonStyle}"
|
||||
IsEnabled="{Binding State.ChipUnload.PhaseSteps[1].IsEnabled}"
|
||||
Click="{mw:Action ChipUnloadPhase2Async}"/>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
|
||||
<TextBlock Text="料盒层数" VerticalAlignment="Center" Foreground="#5B6B83" Margin="0,0,6,0"/>
|
||||
<mw:IntNumberBox Minimum="1" Maximum="25" Width="60"
|
||||
Value="{Binding State.ChipUnload.PhaseSteps[1].TargetLayer}"
|
||||
mw:NumericKeypadAttach.IsEnabled="True"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<ItemsControl ItemsSource="{Binding State.ChipUnload.Indicators}" VerticalAlignment="Top">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="2"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Horizontal" Margin="0,4">
|
||||
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" Foreground="#20354C"/>
|
||||
<Ellipse Style="{StaticResource IndicatorDotStyle}" Margin="6,0,0,0"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="3" Margin="0,8,0,0">
|
||||
<Button Content="{Binding State.ChipUnload.SecondaryActionText}" Style="{StaticResource LogisticsSecondaryButtonStyle}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Column="1" Margin="6,8,8,8">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="120"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<custom:MagazineMapControl MapViewModel="{Binding State.MagazineMap}"/>
|
||||
|
||||
<Button Grid.Row="1"
|
||||
Content="自动扫码 SCAN"
|
||||
Style="{StaticResource LogisticsScanButtonStyle}"
|
||||
IsEnabled="{Binding State.IsScanning, Converter={StaticResource boolToInversionConverter}}"
|
||||
Click="{mw:Action ScanAsync}"/>
|
||||
|
||||
<Grid Grid.Row="2" Margin="0,0,0,8" Visibility="{Binding State.IsScanning, Converter={StaticResource BoolToVisibleConverter}}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock Text="扫码中..." Foreground="#1A2A47" FontWeight="Bold" Margin="2,0,2,4"/>
|
||||
<ProgressBar Grid.Row="1" Height="10" Minimum="0" Maximum="100" Value="{Binding State.ScanProgress}"/>
|
||||
</Grid>
|
||||
|
||||
<Border Grid.Row="3" Background="#07152F" BorderBrush="#2B3E63" BorderThickness="1" CornerRadius="4" Padding="10">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding State.FeedbackTitle}" Foreground="#42A5F5" FontWeight="Bold" FontStyle="Italic"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding State.LastFeedbackTime}" Foreground="#58A6FF"/>
|
||||
</Grid>
|
||||
<ItemsControl Grid.Row="1" Margin="0,8,0,0" ItemsSource="{Binding State.FeedbackRecords}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Foreground="#D6E2F5" TextWrapping="Wrap" Margin="0,0,0,2">
|
||||
<Run Text="["/>
|
||||
<Run Text="{Binding Time, StringFormat={}{0:HH:mm:ss}}"/>
|
||||
<Run Text="] ["/>
|
||||
<Run Text="{Binding Level}"/>
|
||||
<Run Text="] "/>
|
||||
<Run Text="{Binding Message}"/>
|
||||
</TextBlock>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</Grid>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -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.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// LogisticsOperationView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class LogisticsOperationView : UserControl
|
||||
{
|
||||
public LogisticsOperationView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.ManualOperateView"
|
||||
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.Manual.View" xmlns:mw="http://www.maxwell-gp.com/"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<mw:SideMenu ItemsSource="{Binding MenuItemWraps}"
|
||||
SelectedItem="{Binding SelectedMenuItem, Mode=TwoWay}"
|
||||
Grid.Row ="0" Width="150"
|
||||
Margin="-40,0,0,0"
|
||||
ExpandMode="Accordion"
|
||||
AutoSelect="True"
|
||||
>
|
||||
<mw:SideMenu.ItemContainerStyle>
|
||||
<Style TargetType="{x:Type mw:SideMenuItem}" BasedOn="{StaticResource SideMenuItemHeaderAccordionBaseStyle}">
|
||||
<Setter Property="Header" Value="{Binding Header}" />
|
||||
<Setter Property="Tag" Value="{Binding Tag}" />
|
||||
</Style>
|
||||
</mw:SideMenu.ItemContainerStyle>
|
||||
</mw:SideMenu>
|
||||
<ContentControl Margin="5,0" Grid.Column="1" mw:View.Model="{Binding CurrentScreen}"/>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -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.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// ManualOperateView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class ManualOperateView : UserControl
|
||||
{
|
||||
public ManualOperateView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.SubstrateHeightMeasureView"
|
||||
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:recipe="clr-namespace:MainShell.Recipe.Models.SubstrateParameter"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<UserControl.Resources>
|
||||
<ResourceDictionary>
|
||||
<Style x:Key="SubstrateHeightMeasureSummaryLabelStyle" TargetType="TextBlock" BasedOn="{StaticResource ProcessReadOnlyValueTextStyle}">
|
||||
<Setter Property="Width" Value="126"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SubstrateHeightMeasureSummaryValueStyle" TargetType="TextBox" BasedOn="{StaticResource ProcessTextBoxStyle}">
|
||||
<Setter Property="MinWidth" Value="110"/>
|
||||
<Setter Property="Margin" Value="8,0,0,0"/>
|
||||
<Setter Property="IsReadOnly" Value="True"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid Background="{StaticResource ProcessPageBackgroundBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Style="{StaticResource ProcessCameraHostBorderStyle}">
|
||||
<ContentControl Content="{Binding CameraAxisViewModel}" />
|
||||
</Border>
|
||||
<ScrollViewer Grid.Column="1"
|
||||
Margin="0,4,4,4"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
Style="{StaticResource ProcessScrollViewerStyle}"
|
||||
CanContentScroll="False">
|
||||
<Grid Margin="4">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<GroupBox Grid.Row="0" Header="{DynamicResource SubstrateHeightMeasureManualSummary}" Style="{StaticResource ProcessWideCardGroupBoxStyle}">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid Grid.Row="0" Grid.Column="0" Margin="4,2,14,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource SubstrateHeightMeasureManualRecipeName}" Style="{StaticResource SubstrateHeightMeasureSummaryLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding RecipeName, Mode=OneWay}" Style="{StaticResource SubstrateHeightMeasureSummaryValueStyle}" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="0" Grid.Column="1" Margin="4,2,0,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource SubstrateHeightMeasureManualMode}" Style="{StaticResource SubstrateHeightMeasureSummaryLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" HorizontalAlignment="Left">
|
||||
<TextBox.Style>
|
||||
<Style TargetType="TextBox" BasedOn="{StaticResource SubstrateHeightMeasureSummaryValueStyle}">
|
||||
<Setter Property="Text" Value="{DynamicResource SubstrateHeightMeasureManualTeachMode}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding CurrentMeasureMode}" Value="{x:Static recipe:SubstrateHeightMeasureMode.RowColumnOffset}">
|
||||
<Setter Property="Text" Value="{DynamicResource SubstrateHeightMeasureManualRowColumnMode}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBox.Style>
|
||||
</TextBox>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" Grid.Column="0" Margin="4,2,14,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource SubstrateHeightMeasureManualConfiguredCount}" Style="{StaticResource SubstrateHeightMeasureSummaryLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding ConfiguredPointCount, Mode=OneWay}" Style="{StaticResource SubstrateHeightMeasureSummaryValueStyle}" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" Grid.Column="1" Margin="4,2,0,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="{DynamicResource SubstrateHeightMeasureManualMeasuredCount}" Style="{StaticResource SubstrateHeightMeasureSummaryLabelStyle}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding MeasuredPointCount, Mode=OneWay}" Style="{StaticResource SubstrateHeightMeasureSummaryValueStyle}" HorizontalAlignment="Left"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Grid.Row="1" Header="{DynamicResource SubstrateHeightMeasureManualResultList}" Style="{StaticResource ProcessWideCardGroupBoxStyle}" Margin="0,8,0,0">
|
||||
<DataGrid Style="{StaticResource ProcessDataGridStyle}"
|
||||
AutoGenerateColumns="False"
|
||||
IsReadOnly="True"
|
||||
CanUserAddRows="False"
|
||||
ItemsSource="{Binding PointResults}"
|
||||
MinHeight="260">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Width="1.4*" Header="{DynamicResource SubstrateHeightMeasureManualPointName}" Binding="{Binding PointName}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource SubstrateHeightMeasureManualRow}" Binding="{Binding RowIndex}"/>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource SubstrateHeightMeasureManualColumn}" Binding="{Binding ColumnIndex}"/>
|
||||
<DataGridTextColumn Width="1.2*" Header="{DynamicResource SubstrateHeightMeasureManualPositionX}" Binding="{Binding PositionX, StringFormat={}{0:F4}}"/>
|
||||
<DataGridTextColumn Width="1.2*" Header="{DynamicResource SubstrateHeightMeasureManualPositionY}" Binding="{Binding PositionY, StringFormat={}{0:F4}}"/>
|
||||
<DataGridTextColumn Width="1.2*" Header="{DynamicResource SubstrateHeightMeasureManualHeightValue}" Binding="{Binding HeightValue, StringFormat={}{0:F4}}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</GroupBox>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,8,0,0">
|
||||
<Button Content="{DynamicResource Start}" Click="{mw:Action StartProcess}" Style="{StaticResource StartButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}" />
|
||||
<Button Content="{DynamicResource Stop}" Click="{mw:Action StopProcess}" Style="{StaticResource StopButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace MainShell.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// SubstrateHeightMeasureView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class SubstrateHeightMeasureView : UserControl
|
||||
{
|
||||
public SubstrateHeightMeasureView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.SubstratePositionView"
|
||||
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="SubstratePositionPageTitleStyle" TargetType="TextBlock">
|
||||
<Setter Property="FontSize" Value="17"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
<Setter Property="Foreground" Value="{StaticResource ProcessTitleForegroundBrush}"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
<Setter Property="Margin" Value="0,0,0,12"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SubstratePositionSectionGroupBoxStyle" TargetType="GroupBox" BasedOn="{StaticResource ProcessWideCardGroupBoxStyle}">
|
||||
<Setter Property="Margin" Value="0,0,0,14"/>
|
||||
<Setter Property="Padding" Value="18,12,18,14"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SubstratePositionHeaderStretchGroupBoxStyle" TargetType="GroupBox" BasedOn="{StaticResource {x:Type GroupBox}}">
|
||||
<Setter Property="Background" Value="{StaticResource ProcessCardBackgroundBrush}"/>
|
||||
<Setter Property="BorderBrush" Value="{StaticResource ProcessCardBorderBrush}"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
<Setter Property="Foreground" Value="{StaticResource ProcessTitleForegroundBrush}"/>
|
||||
<Setter Property="FontSize" Value="14"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
<Setter Property="Margin" Value="0,0,0,14"/>
|
||||
<Setter Property="Padding" Value="18,12,18,14"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="GroupBox">
|
||||
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="38"/>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Border Grid.Row="0" Background="{StaticResource ProcessHeaderBackgroundBrush}" BorderBrush="{StaticResource ProcessCardBorderBrush}" BorderThickness="0,0,0,1" CornerRadius="3,3,0,0" Padding="12,0">
|
||||
<ContentPresenter ContentSource="Header" HorizontalAlignment="Stretch" VerticalAlignment="Center" RecognizesAccessKey="True"/>
|
||||
</Border>
|
||||
<Border Grid.Row="1" Background="{StaticResource ProcessCardBackgroundBrush}" Padding="{TemplateBinding Padding}" CornerRadius="0,0,3,3">
|
||||
<ContentPresenter/>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SubstratePositionEditorTextStyle" TargetType="TextBlock" BasedOn="{StaticResource ProcessReadOnlyValueTextStyle}">
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="Margin" Value="0,0,10,0"/>
|
||||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SubstratePositionAngleValueStyle" TargetType="mw:NumberBox" BasedOn="{StaticResource ProcessLargeNumberBoxStyle}">
|
||||
<Setter Property="Width" Value="154"/>
|
||||
<Setter Property="Margin" Value="0"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SubstratePositionEditorNumberBoxStyle" TargetType="mw:IntNumberBox" BasedOn="{StaticResource ProcessIntNumberBoxStyle}">
|
||||
<Setter Property="Width" Value="78"/>
|
||||
<Setter Property="Margin" Value="0"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SubstratePositionHeaderCheckBoxStyle" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
|
||||
<Setter Property="Foreground" Value="{StaticResource ProcessBodyForegroundBrush}"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="SubstratePositionMapHostStyle" TargetType="Border">
|
||||
<Setter Property="Background" Value="#EEF3F8"/>
|
||||
<Setter Property="BorderBrush" Value="{StaticResource ProcessCardBorderBrush}"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
<Setter Property="CornerRadius" Value="2"/>
|
||||
<Setter Property="Padding" Value="16"/>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid Background="{StaticResource ProcessPageBackgroundBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Style="{StaticResource ProcessCameraHostBorderStyle}">
|
||||
<ContentControl Content="{Binding CameraAxisViewModel}" IsEnabled="{Binding Runner.IsRunning,Converter={StaticResource boolToInversionConverter}}"/>
|
||||
</Border>
|
||||
<ScrollViewer Grid.Column="1"
|
||||
Margin="10,8,14,10"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled"
|
||||
Style="{StaticResource ProcessScrollViewerStyle}"
|
||||
CanContentScroll="False">
|
||||
<Grid MinWidth="520">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0">
|
||||
<TextBlock Style="{StaticResource SubstratePositionPageTitleStyle}" Text="{DynamicResource SubstratePosition}"/>
|
||||
<Border Height="1" Background="{StaticResource ProcessCardBorderBrush}" Margin="0,0,0,12"/>
|
||||
</StackPanel>
|
||||
|
||||
<GroupBox Grid.Row="1" Header="{DynamicResource MarkResult}" Style="{StaticResource SubstratePositionSectionGroupBoxStyle}">
|
||||
<DataGrid Style="{StaticResource ProcessDataGridStyle}" AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding MarkResults}" MinHeight="86">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Width="*" Header="{DynamicResource ID}" Binding="{Binding Id}"/>
|
||||
<DataGridTextColumn Width="1.75*" Header="{DynamicResource BaseX}" Binding="{Binding BasePose.X}"/>
|
||||
<DataGridTextColumn Width="1.75*" Header="{DynamicResource BaseY}" Binding="{Binding BasePose.Y}"/>
|
||||
<DataGridTextColumn Width="1.75*" Header="{DynamicResource ResultX}" Binding="{Binding ResultPose.X}"/>
|
||||
<DataGridTextColumn Width="1.75*" Header="{DynamicResource ResultY}" Binding="{Binding ResultPose.Y}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Grid.Row="2" Header="{DynamicResource SubstrateAngle}" Style="{StaticResource SubstratePositionSectionGroupBoxStyle}">
|
||||
<Grid>
|
||||
<mw:NumberBox Style="{StaticResource SubstratePositionAngleValueStyle}" IsReadOnly="True" Value="{Binding SubstrateAngle}" HorizontalAlignment="Center"/>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Grid.Row="3" Header="{DynamicResource VerifiyResult}" Style="{StaticResource SubstratePositionSectionGroupBoxStyle}"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}">
|
||||
<Grid HorizontalAlignment="Center">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Style="{StaticResource SubstratePositionEditorTextStyle}" Text="{DynamicResource SubstrateRow}"/>
|
||||
<mw:IntNumberBox Grid.Column="1" Style="{StaticResource SubstratePositionEditorNumberBoxStyle}" Minimum="1" Maximum="{Binding RowMax}" Value="{Binding RowIndex}" mw:NumericKeypadAttach.IsEnabled="True"/>
|
||||
<TextBlock Grid.Column="2" Style="{StaticResource SubstratePositionEditorTextStyle}" Text="{DynamicResource SubstrateCol}" Margin="26,0,10,0"/>
|
||||
<mw:IntNumberBox Grid.Column="3" Style="{StaticResource SubstratePositionEditorNumberBoxStyle}" Minimum="1" Maximum="{Binding ColMax}" Value="{Binding ColumnIndex}" mw:NumericKeypadAttach.IsEnabled="True"/>
|
||||
<Button Grid.Column="4" Style="{StaticResource AxisMoveButtonStyle}" Click="{mw:Action MoveToSelectPad}" Content="{DynamicResource Move}" Margin="26,0,0,0"/>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Grid.Row="4" Style="{StaticResource SubstratePositionHeaderStretchGroupBoxStyle}">
|
||||
<GroupBox.Header>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="1" Text="{DynamicResource SubstrateMap}" VerticalAlignment="Center" Foreground="{StaticResource ProcessTitleForegroundBrush}" FontWeight="SemiBold"/>
|
||||
<CheckBox Grid.Column="2" Style="{StaticResource SubstratePositionHeaderCheckBoxStyle}" Content="{DynamicResource AllowClickSelection}" IsChecked="{Binding IsClickEnabled}" HorizontalAlignment="Right"/>
|
||||
</Grid>
|
||||
</GroupBox.Header>
|
||||
<custom:DieMapPanelControl MinHeight="286"
|
||||
MaxHeight="560"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
MapModel="{Binding SubstrateMapModel}"
|
||||
DieSize="15"
|
||||
Spacing="2"
|
||||
MapBackground="#EEF3F8"
|
||||
MapMargin="16"
|
||||
Caption=""
|
||||
DieClickedCommand="{Binding DieClickedCommand}"/>
|
||||
</GroupBox>
|
||||
|
||||
<StackPanel Grid.Row="5" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,4,0,0">
|
||||
<Button Content="{DynamicResource Start}" Click="{mw:Action StartProcess}" Style="{StaticResource StartButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}" />
|
||||
<Button Content="{DynamicResource Stop}" Click="{mw:Action StopProcess}" Style="{StaticResource StopButtonStyle }" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,26 @@
|
||||
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.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
namespace MainShell.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// SubstratePositionView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class SubstratePositionView : UserControl
|
||||
{
|
||||
public SubstratePositionView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<UserControl x:Class="MainShell.Manual.View.WaferAngleAdjustmentView"
|
||||
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.Manual.View" xmlns:mw="http://www.maxwell-gp.com/"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<ContentControl Content="{Binding CameraAxisViewModel}" />
|
||||
<GroupBox Grid.Column="1" Header="{DynamicResource WaferAngleAdjustment}">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Orientation="Vertical" Margin="5">
|
||||
<GroupBox Style="{StaticResource GroupBoxSecondary}" MinHeight="120" Header="{DynamicResource WaferAngleResult}">
|
||||
<StackPanel Margin="5" Orientation="Horizontal" HorizontalAlignment="Center">
|
||||
<mw:NumberBox IsReadOnly="True" Value="{Binding SubstrateAngle}" Width="120"/>
|
||||
</StackPanel>
|
||||
</GroupBox>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="1">
|
||||
<!-- 开始按钮:运行时禁用 -->
|
||||
<Button Content="{DynamicResource Start}" Click="{mw:Action StartProcess}" Style="{StaticResource StartButtonStyle}" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning, Converter={StaticResource boolToInversionConverter}}" />
|
||||
<!-- 停止按钮:仅运行时启用 -->
|
||||
<Button Content="{DynamicResource Stop}" Click="{mw:Action StopProcess}" Style="{StaticResource StopButtonStyle }" Margin="5"
|
||||
IsEnabled="{Binding Runner.IsRunning}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -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.Manual.View
|
||||
{
|
||||
/// <summary>
|
||||
/// WaferAngleAdjustmentView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class WaferAngleAdjustmentView : UserControl
|
||||
{
|
||||
public WaferAngleAdjustmentView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user