添加 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,91 @@
<UserControl x:Class="MainShell.Recipe.View.CarrierRecipeView"
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.Recipe.View"
xmlns:mw="http://www.maxwell-gp.com/"
mc:Ignorable="d"
d:DesignHeight="850" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<GroupBox DataContext="{Binding CarrierRecipe.CarrierInfo}" Header="{DynamicResource CarrierInfo}">
<UniformGrid Rows="7" Columns="1">
<UniformGrid.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource TextBlockStyle}">
</Style>
</UniformGrid.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource TextBlockStyle}" Text="{DynamicResource CarrierWidth}"/>
<mw:NumberBox Width="120" Grid.Column="1" Value="{Binding Width}" Maximum="300" Minimum="50" mw:NumericKeypadAttach.IsEnabled="True"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120" mw:NumericKeypadAttach.IsEnabled="True"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource TextBlockStyle}" Text="{DynamicResource CarrierHeight}"/>
<mw:NumberBox Width="120" Grid.Column="1" Value="{Binding Height}" Maximum="300" Minimum="50" mw:NumericKeypadAttach.IsEnabled="True"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120" mw:NumericKeypadAttach.IsEnabled="True"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource TextBlockStyle}" Text="{DynamicResource CarrierThickness}"/>
<mw:NumberBox Width="120" Grid.Column="1" Value="{Binding Thickness}" Maximum="300" Minimum="50" mw:NumericKeypadAttach.IsEnabled="True"/>
</Grid>
</UniformGrid>
</GroupBox>
<GroupBox Grid.Column="1" Header="{DynamicResource SubstrateSelect}">
<Grid>
<Border BorderThickness="0,0,0,0.5" BorderBrush="{DynamicResource BorderBrush}" >
<ScrollViewer VerticalScrollBarVisibility="Auto">
<DataGrid x:Name="selectSubstrateInfo"
ItemsSource="{Binding CarrierRecipe.SubstrateSelectInfos}"
AutoGenerateColumns="False"
CanUserSortColumns="False"
SelectionMode="Single">
<DataGrid.Columns>
<DataGridComboBoxColumn Width="*" Header="{DynamicResource SubstrateRecipe}" TextBinding="{Binding SubstrateName}">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}, Path=DataContext.SubstrateRecipes}" />
<Setter Property="DisplayMemberPath" Value="RecipeName"/>
<Setter Property="SelectedIndex" Value="0"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Width="*" Header="{DynamicResource Description}" Binding="{Binding Description}"/>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Border>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,10">
<Button Content="{DynamicResource Add}" Style="{StaticResource StartButtonStyle}" Click="{mw:Action AddSubstrate}"/>
<Button Content="{DynamicResource Delete}" Style="{StaticResource CloseButtonStyle}"
Command="{Binding RemoveSubstrateCommand}"
CommandParameter="{Binding ElementName=selectSubstrateInfo, Path=SelectedItem}"/>
</StackPanel>
</Grid>
</GroupBox>
</Grid>
<GroupBox Grid.Row="1" Header="{DynamicResource LogisticsInfo}">
</GroupBox>
</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.Recipe.View
{
/// <summary>
/// CarrierRecipeView.xaml 的交互逻辑
/// </summary>
public partial class CarrierRecipeView : UserControl
{
public CarrierRecipeView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,292 @@
<?xml version="1.0" encoding="utf-8"?>
<Window x:Class="MainShell.Recipe.View.MarkCoordinatePreviewWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="{DynamicResource MarkCoordinatePreviewWindowTitle}"
Width="940"
Height="720"
MinWidth="860"
MinHeight="620"
WindowStartupLocation="CenterOwner"
Background="#F3F6FB">
<Window.Resources>
<SolidColorBrush x:Key="PageBackgroundBrush" Color="#F3F6FB"/>
<SolidColorBrush x:Key="PanelBorderBrush" Color="#D8E0EC"/>
<SolidColorBrush x:Key="PanelHeaderBrush" Color="#F7FAFD"/>
<SolidColorBrush x:Key="PrimaryBrush" Color="#2F5DAA"/>
<SolidColorBrush x:Key="PrimaryDarkBrush" Color="#244C8D"/>
<SolidColorBrush x:Key="PrimaryLightBrush" Color="#EAF1FF"/>
<SolidColorBrush x:Key="BodyTextBrush" Color="#26415E"/>
<SolidColorBrush x:Key="MutedTextBrush" Color="#6E7F96"/>
<SolidColorBrush x:Key="DangerBrush" Color="#D95B69"/>
<SolidColorBrush x:Key="DangerPanelBrush" Color="#FFF8F8"/>
<SolidColorBrush x:Key="DangerBorderBrush" Color="#FFD8D8"/>
<Style x:Key="CardBorderStyle" TargetType="Border">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="{StaticResource PanelBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="3"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
</Style>
<Style x:Key="HeaderTitleStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="22"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}"/>
</Style>
<Style x:Key="HeaderSubtitleStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="13"/>
<Setter Property="Foreground" Value="{StaticResource MutedTextBrush}"/>
</Style>
<Style x:Key="SectionTitleStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="16"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="MetricLabelStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="14"/>
<Setter Property="Foreground" Value="{StaticResource MutedTextBrush}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Style>
<Style x:Key="MetricValueStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="28"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}"/>
</Style>
<Style x:Key="PrimaryActionButtonStyle" TargetType="Button">
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="{StaticResource PrimaryBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource PrimaryBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="18,8"/>
<Setter Property="Height" Value="40"/>
<Setter Property="MinWidth" Value="112"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="3"
SnapsToDevicePixels="True">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource PrimaryDarkBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource PrimaryDarkBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#1D3F74"/>
<Setter Property="BorderBrush" Value="#1D3F74"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.55"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="GhostActionButtonStyle" TargetType="Button" BasedOn="{StaticResource PrimaryActionButtonStyle}">
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}"/>
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="{StaticResource PanelBorderBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="3"
SnapsToDevicePixels="True">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource PrimaryLightBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource PrimaryBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#DDE9FF"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.55"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="DataGrid">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="{StaticResource PanelBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{StaticResource BodyTextBrush}"/>
<Setter Property="RowBackground" Value="White"/>
<Setter Property="AlternatingRowBackground" Value="#FAFCFF"/>
<Setter Property="GridLinesVisibility" Value="Horizontal"/>
<Setter Property="HorizontalGridLinesBrush" Value="#E4E9F2"/>
<Setter Property="VerticalGridLinesBrush" Value="#E4E9F2"/>
<Setter Property="HeadersVisibility" Value="Column"/>
<Setter Property="CanUserAddRows" Value="False"/>
<Setter Property="CanUserDeleteRows" Value="False"/>
<Setter Property="CanUserResizeRows" Value="False"/>
<Setter Property="CanUserReorderColumns" Value="False"/>
<Setter Property="CanUserSortColumns" Value="False"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="RowHeaderWidth" Value="0"/>
<Setter Property="AutoGenerateColumns" Value="False"/>
<Setter Property="SelectionMode" Value="Single"/>
<Setter Property="SelectionUnit" Value="FullRow"/>
<Setter Property="RowHeight" Value="42"/>
<Setter Property="ColumnHeaderHeight" Value="46"/>
</Style>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Background" Value="{StaticResource PanelHeaderBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource PanelBorderBrush}"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="Padding" Value="8,4"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
</Style>
</Window.Resources>
<Grid Background="{StaticResource PageBackgroundBrush}" Margin="16">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Style="{StaticResource CardBorderStyle}" Padding="18,16">
<DockPanel LastChildFill="True">
<Button DockPanel.Dock="Right"
Content="{DynamicResource MarkCoordinatePreviewClose}"
Style="{StaticResource GhostActionButtonStyle}"
Command="{Binding CloseCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"/>
<StackPanel>
<TextBlock Text="{DynamicResource MarkCoordinatePreviewWindowTitle}"
Style="{StaticResource HeaderTitleStyle}"/>
<TextBlock Text="Preview"
Style="{StaticResource HeaderSubtitleStyle}"
Margin="0,4,0,0"/>
</StackPanel>
</DockPanel>
</Border>
<Grid Grid.Row="1" Margin="0,14,0,14">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="260"/>
<ColumnDefinition Width="12"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Style="{StaticResource CardBorderStyle}" Padding="18,16">
<StackPanel>
<TextBlock Text="{DynamicResource MarkCoordinatePreviewPointCountLabel}"
Style="{StaticResource MetricLabelStyle}"/>
<TextBlock Text="{Binding PointCount}"
Style="{StaticResource MetricValueStyle}"
Margin="0,6,0,0"/>
</StackPanel>
</Border>
<Border Grid.Column="2" Style="{StaticResource CardBorderStyle}" Padding="18,16">
<StackPanel>
<TextBlock Text="Read-only data view"
Style="{StaticResource SectionTitleStyle}"/>
<TextBlock Text="The table below mirrors the generated or imported coordinate set and does not edit source data."
Foreground="{StaticResource BodyTextBrush}"
TextWrapping="Wrap"
Margin="0,8,0,0"/>
</StackPanel>
</Border>
</Grid>
<Border Grid.Row="2" Style="{StaticResource CardBorderStyle}" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<DockPanel Grid.Row="0" Background="{StaticResource PanelHeaderBrush}" LastChildFill="False">
<TextBlock Margin="18,12"
Text="{DynamicResource MarkCoordinatePreviewWindowTitle}"
Style="{StaticResource SectionTitleStyle}"/>
<TextBlock Margin="0,12,18,12"
DockPanel.Dock="Right"
Foreground="{StaticResource MutedTextBrush}"
VerticalAlignment="Center"
Text="{Binding PointCount, StringFormat=Total: {0}}"/>
</DockPanel>
<DataGrid Grid.Row="1"
Margin="16"
ItemsSource="{Binding Points}"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<DataGrid.Columns>
<DataGridTextColumn Header="{DynamicResource MarkCoordinatePreviewIndex}" Width="90" Binding="{Binding Index}"/>
<DataGridTextColumn Header="{DynamicResource MarkCoordinatePreviewPointName}" Width="2*" Binding="{Binding PointName}"/>
<DataGridTextColumn Header="{DynamicResource MarkCoordinatePreviewRow}" Width="*" Binding="{Binding Row}"/>
<DataGridTextColumn Header="{DynamicResource MarkCoordinatePreviewCol}" Width="*" Binding="{Binding Col}"/>
<DataGridTextColumn Header="{DynamicResource MarkCoordinatePreviewTheoryX}" Width="*" Binding="{Binding TheoryX, StringFormat={}{0:F4}}"/>
<DataGridTextColumn Header="{DynamicResource MarkCoordinatePreviewTheoryY}" Width="*" Binding="{Binding TheoryY, StringFormat={}{0:F4}}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Border>
<Border Grid.Row="3"
Margin="0,14,0,0"
Padding="14,10"
Background="{StaticResource DangerPanelBrush}"
BorderBrush="{StaticResource DangerBorderBrush}"
BorderThickness="1"
CornerRadius="3">
<DockPanel LastChildFill="True">
<Button DockPanel.Dock="Right"
Content="{DynamicResource MarkCoordinatePreviewClose}"
Style="{StaticResource GhostActionButtonStyle}"
Margin="12,0,0,0"
Command="{Binding CloseCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"/>
<TextBlock Text="{DynamicResource MarkCoordinatePreviewReadOnlyTip}"
VerticalAlignment="Center"
Foreground="{StaticResource DangerBrush}"
TextWrapping="Wrap"/>
</DockPanel>
</Border>
</Grid>
</Window>

View File

@@ -0,0 +1,23 @@
using System.Windows;
using MainShell.Recipe.ViewModel;
namespace MainShell.Recipe.View
{
public partial class MarkCoordinatePreviewWindow : Window
{
public MarkCoordinatePreviewWindow()
{
InitializeComponent();
}
protected override void OnClosed(System.EventArgs e)
{
if (DataContext is MarkCoordinatePreviewWindowModel viewModel)
{
viewModel.Cleanup();
}
base.OnClosed(e);
}
}
}

View File

@@ -0,0 +1,459 @@
<UserControl x:Class="MainShell.Recipe.View.MarkTeachView"
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"
mc:Ignorable="d"
d:DesignHeight="450"
d:DesignWidth="800">
<UserControl.Resources>
<SolidColorBrush x:Key="MarkTeachPageBackgroundBrush" Color="#F4F7FB"/>
<SolidColorBrush x:Key="MarkTeachCardBackgroundBrush" Color="#FFFFFF"/>
<SolidColorBrush x:Key="MarkTeachCardBorderBrush" Color="#D6E0EA"/>
<SolidColorBrush x:Key="MarkTeachHeaderBackgroundBrush" Color="#EEF3F8"/>
<SolidColorBrush x:Key="MarkTeachHeaderForegroundBrush" Color="#2E5FA7"/>
<SolidColorBrush x:Key="MarkTeachBodyTextBrush" Color="#425466"/>
<SolidColorBrush x:Key="MarkTeachMutedTextBrush" Color="#6B7B8D"/>
<SolidColorBrush x:Key="MarkTeachNumberBrush" Color="#264B86"/>
<SolidColorBrush x:Key="MarkTeachTabSelectedBrush" Color="#E8F0FC"/>
<SolidColorBrush x:Key="MarkTeachTabHoverBrush" Color="#F4F8FE"/>
<SolidColorBrush x:Key="MarkTeachTabNormalBrush" Color="#D6DDE7"/>
<Style x:Key="MarkTeachSectionGroupStyle" TargetType="GroupBox">
<Setter Property="BorderBrush" Value="{StaticResource MarkTeachCardBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="{StaticResource MarkTeachCardBackgroundBrush}"/>
<Setter Property="Margin" Value="0,0,0,12"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupBox">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Background="{StaticResource MarkTeachHeaderBackgroundBrush}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="0,0,0,1"
Padding="12,8">
<ContentPresenter ContentSource="Header" HorizontalAlignment="Center"/>
</Border>
<ContentPresenter Grid.Row="1"
Margin="12,12,12,12"
ContentSource="Content"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}"
FontSize="15"
FontWeight="Bold"
Foreground="{StaticResource MarkTeachHeaderForegroundBrush}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="MarkTeachFieldLabelStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource MarkTeachBodyTextBrush}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Margin" Value="0,0,0,6"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="MarkTeachReadOnlyTextBoxStyle" TargetType="TextBox">
<Setter Property="Height" Value="34"/>
<Setter Property="Padding" Value="12,0"/>
<Setter Property="BorderBrush" Value="{StaticResource MarkTeachCardBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="#2F3E4E"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style x:Key="MarkTeachInputTextBoxStyle" TargetType="TextBox" BasedOn="{StaticResource MarkTeachReadOnlyTextBoxStyle}">
<Setter Property="Height" Value="38"/>
<Setter Property="MinWidth" Value="96"/>
</Style>
<Style x:Key="MarkTeachPrimaryActionButtonStyle" TargetType="Button" BasedOn="{StaticResource MarkPrimaryActionButtonStyle}">
<Setter Property="Height" Value="38"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Style>
<Style x:Key="MarkTeachOutlineActionButtonStyle" TargetType="Button" BasedOn="{StaticResource MarkOutlineActionButtonStyle}">
<Setter Property="Height" Value="38"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Style>
<Style x:Key="MarkTeachNeutralActionButtonStyle" TargetType="Button" BasedOn="{StaticResource MarkNeutralActionButtonStyle}">
<Setter Property="Height" Value="38"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Style>
<Style x:Key="MarkTeachDangerOutlineButtonStyle" TargetType="Button" BasedOn="{StaticResource MarkDangerOutlineButtonStyle}">
<Setter Property="Height" Value="38"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Style>
<Style x:Key="MarkTeachHintTextStyle" TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="Foreground" Value="{StaticResource MarkTeachBodyTextBrush}"/>
<Setter Property="LineHeight" Value="22"/>
</Style>
<Style x:Key="MarkTeachCaptionStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource MarkTeachMutedTextBrush}"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Margin" Value="0,0,0,10"/>
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
<Style x:Key="MarkTeachInlineCaptionStyle" TargetType="TextBlock" BasedOn="{StaticResource MarkTeachCaptionStyle}">
<Setter Property="Margin" Value="0"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="MarkTeachStatTitleStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource MarkTeachMutedTextBrush}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Style>
<Style x:Key="MarkTeachStatValueStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="24"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="{StaticResource MarkTeachNumberBrush}"/>
</Style>
<Style x:Key="MarkTeachTabItemStyle" TargetType="TabItem">
<Setter Property="Padding" Value="34,12"/>
<Setter Property="Foreground" Value="{StaticResource MarkTeachBodyTextBrush}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Background" Value="{StaticResource MarkTeachTabNormalBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource MarkTeachCardBorderBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Border x:Name="TabBorder"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="0,2,1,0"
Margin="0,0,1,0"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"
ContentSource="Header"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="TabBorder" Property="Background" Value="White"/>
<Setter TargetName="TabBorder" Property="BorderBrush" Value="{StaticResource MarkTeachHeaderForegroundBrush}"/>
<Setter Property="Foreground" Value="{StaticResource MarkTeachHeaderForegroundBrush}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="TabBorder" Property="Background" Value="{StaticResource MarkTeachTabHoverBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid Background="{StaticResource MarkTeachPageBackgroundBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="1"
Margin="12"
Background="White"
BorderBrush="{StaticResource MarkTeachCardBorderBrush}"
BorderThickness="1">
<TabControl Background="Transparent"
BorderThickness="0"
Padding="0"
ItemContainerStyle="{StaticResource MarkTeachTabItemStyle}">
<TabItem Header="{DynamicResource MarkTeachTabTeach}">
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<Grid Margin="20,16,20,12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0"
Style="{StaticResource MarkTeachSectionGroupStyle}"
Header="{DynamicResource MakeModel}">
<StackPanel>
<TextBlock Text="{DynamicResource MarkTeachTeachSectionHint}"
Style="{StaticResource MarkTeachCaptionStyle}"/>
<WrapPanel Orientation="Horizontal">
<Button Style="{StaticResource MarkTeachPrimaryActionButtonStyle}"
Content="{DynamicResource VisionParSet}"
Command="{Binding VisionParSetCmd}"
Margin="0,0,10,0"/>
<Button Style="{StaticResource MarkTeachOutlineActionButtonStyle}"
Content="{DynamicResource MarkModel}"
Command="{Binding MarkModelCmd}"
Margin="0"/>
</WrapPanel>
</StackPanel>
</GroupBox>
<GroupBox Grid.Row="1"
Style="{StaticResource MarkTeachSectionGroupStyle}"
Header="{DynamicResource MarkTeachOperationsHeader}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WrapPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,12">
<Button Content="{DynamicResource AddMark}"
Style="{StaticResource MarkTeachPrimaryActionButtonStyle}"
Command="{Binding AddMarkCmd}"
Margin="0,0,10,10"/>
<Button Content="{DynamicResource DeleteMark}"
Style="{StaticResource MarkTeachDangerOutlineButtonStyle}"
Command="{Binding DeleteMarkCmd}"
Margin="0,0,10,10"/>
<Button Content="{DynamicResource TeachPos}"
Style="{StaticResource MarkTeachNeutralActionButtonStyle}"
Command="{Binding TeachMarkCmd}"
Margin="0,0,10,10"/>
<Button Content="{DynamicResource MoveToCurrentPos}"
Style="{StaticResource MarkTeachNeutralActionButtonStyle}"
Command="{Binding MoveToMarkCmd}"
Margin="0,0,10,10"/>
<CheckBox Content="{DynamicResource MarkTeachReferenceTeach}"
IsChecked="{Binding IsTeachPose, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center"
Margin="8,0,2,10"/>
</WrapPanel>
<DataGrid Grid.Row="1"
Margin="0"
MinHeight="180"
ItemsSource="{Binding MarkDatas}"
SelectedItem="{Binding SelectedMarkData}"
AutoGenerateColumns="False"
CanUserAddRows="False">
<DataGrid.Resources>
<Style x:Key="NumericOnlyEditingTextBoxStyle" TargetType="TextBox">
<Setter Property="behavior:ControlBehavior.IsNumericOnly" Value="True"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="{DynamicResource InUse}" Width="58">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox
HorizontalAlignment="Center"
VerticalAlignment="Center"
IsChecked="{Binding IsEnabled, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="{DynamicResource MarkTeachBaseX}" Width="*" Binding="{Binding BasePos.X}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="{DynamicResource MarkTeachBaseY}" Width="*" Binding="{Binding BasePos.Y}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="{DynamicResource MarkTeachCameraX}" Width="*" Binding="{Binding CameraPos.X}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="{DynamicResource MarkTeachCameraY}" Width="*" Binding="{Binding CameraPos.Y}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
<DataGridComboBoxColumn Width="2*" TextBinding="{Binding TemplateName}" Header="{DynamicResource MarkTeachTemplateName}">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding DataContext.AvailableTemplates, RelativeSource={RelativeSource AncestorType=UserControl}}" />
<Setter Property="DisplayMemberPath" Value="TemplateName"/>
<Setter Property="SelectedIndex" Value="0"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</GroupBox>
<Border Grid.Row="2"
Padding="12,10"
Background="#F8FBFF"
BorderBrush="{StaticResource MarkTeachCardBorderBrush}"
BorderThickness="1">
<TextBlock Text="{DynamicResource MarkTeachTeachBottomHint}"
Style="{StaticResource MarkTeachHintTextStyle}"/>
</Border>
</Grid>
</ScrollViewer>
</TabItem>
<TabItem Header="{DynamicResource MarkTeachTabCoordinate}">
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<Grid Margin="20,16,20,12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0"
Style="{StaticResource MarkTeachSectionGroupStyle}"
Header="{DynamicResource MarkTeachCoordinateSourceHeader}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="14"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="14"/>
<ColumnDefinition Width="96"/>
<ColumnDefinition Width="14"/>
<ColumnDefinition Width="96"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0"
Grid.ColumnSpan="8"
Text="{DynamicResource MarkTeachCoordinateActionHint}"
Style="{StaticResource MarkTeachCaptionStyle}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="{DynamicResource MarkTeachPitchX}" Style="{StaticResource MarkTeachFieldLabelStyle}"/>
<TextBlock Grid.Row="1" Grid.Column="2" Text="{DynamicResource MarkTeachPitchY}" Style="{StaticResource MarkTeachFieldLabelStyle}"/>
<TextBlock Grid.Row="1" Grid.Column="4" Text="{DynamicResource MarkTeachRows}" Style="{StaticResource MarkTeachFieldLabelStyle}"/>
<TextBlock Grid.Row="1" Grid.Column="6" Text="{DynamicResource MarkTeachCols}" Style="{StaticResource MarkTeachFieldLabelStyle}"/>
<TextBox Grid.Row="2" Grid.Column="0"
Style="{StaticResource MarkTeachInputTextBoxStyle}"
Text="{Binding CoordinateGenerationState.PitchX, UpdateSourceTrigger=PropertyChanged}"
behavior:ControlBehavior.IsNumericOnly="True"/>
<TextBox Grid.Row="2" Grid.Column="2"
Style="{StaticResource MarkTeachInputTextBoxStyle}"
Text="{Binding CoordinateGenerationState.PitchY, UpdateSourceTrigger=PropertyChanged}"
behavior:ControlBehavior.IsNumericOnly="True"/>
<TextBox Grid.Row="2" Grid.Column="4"
Style="{StaticResource MarkTeachInputTextBoxStyle}"
Text="{Binding CoordinateGenerationState.Rows, UpdateSourceTrigger=PropertyChanged}"
behavior:ControlBehavior.IsNumericOnly="True"/>
<TextBox Grid.Row="2" Grid.Column="6"
Style="{StaticResource MarkTeachInputTextBoxStyle}"
Text="{Binding CoordinateGenerationState.Cols, UpdateSourceTrigger=PropertyChanged}"
behavior:ControlBehavior.IsNumericOnly="True"/>
<StackPanel Grid.Row="3"
Grid.ColumnSpan="8"
Margin="0,14,0,0">
<TextBlock Text="{DynamicResource MarkTeachCoordinateActionHeader}"
Style="{StaticResource MarkTeachFieldLabelStyle}"
Margin="0,0,0,8"/>
<WrapPanel HorizontalAlignment="Left"
Orientation="Horizontal">
<Button Content="{DynamicResource MarkTeachGenerateCoordinates}"
Style="{StaticResource MarkTeachPrimaryActionButtonStyle}"
Command="{Binding GenerateCoordinatesCmd}"
Margin="0,0,10,10"/>
<Button Content="{DynamicResource MarkTeachImportCoordinates}"
Style="{StaticResource MarkTeachOutlineActionButtonStyle}"
Command="{Binding ImportCoordinatesCmd}"
Margin="0,0,10,10"/>
<Button Content="{DynamicResource MarkCoordinatePreviewOpen}"
Style="{StaticResource MarkTeachOutlineActionButtonStyle}"
Command="{Binding ShowCoordinatePreviewCmd}"
Margin="0,0,10,10"/>
<Button Content="{DynamicResource MarkTeachClearCoordinates}"
Style="{StaticResource MarkTeachDangerOutlineButtonStyle}"
Command="{Binding ClearCoordinatesCmd}"
Margin="0,0,0,10"/>
</WrapPanel>
</StackPanel>
</Grid>
</GroupBox>
<GroupBox Grid.Row="1"
Style="{StaticResource MarkTeachSectionGroupStyle}"
Header="{DynamicResource MarkTeachCoordinateDetailsHeader}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
Margin="0,0,0,12"
Orientation="Horizontal"
HorizontalAlignment="Right">
<TextBlock Text="{DynamicResource MarkTeachCoordinateCurrentDisplayCount}"
Style="{StaticResource MarkTeachInlineCaptionStyle}"/>
<TextBlock Text="{Binding CoordinatePreviewPoints.Count}"
Foreground="{StaticResource MarkTeachHeaderForegroundBrush}"
FontWeight="Bold"
VerticalAlignment="Center"/>
</StackPanel>
<Grid Grid.Row="1">
<DataGrid Margin="0"
MinHeight="320"
ItemsSource="{Binding CoordinatePreviewPoints}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="{DynamicResource MarkTeachCoordinateIndex}" Width="78" Binding="{Binding Index}"/>
<DataGridTextColumn Header="{DynamicResource MarkTeachCoordinatePointName}" Width="2*" Binding="{Binding PointName}"/>
<DataGridTextColumn Header="{DynamicResource MarkTeachCoordinateRowHeader}" Width="*" Binding="{Binding Row}"/>
<DataGridTextColumn Header="{DynamicResource MarkTeachCoordinateColHeader}" Width="*" Binding="{Binding Col}"/>
<DataGridTextColumn Header="{DynamicResource MarkTeachCoordinateTheoryX}" Width="*" Binding="{Binding TheoryX, StringFormat={}{0:0.####}}"/>
<DataGridTextColumn Header="{DynamicResource MarkTeachCoordinateTheoryY}" Width="*" Binding="{Binding TheoryY, StringFormat={}{0:0.####}}"/>
</DataGrid.Columns>
</DataGrid>
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{DynamicResource MarkTeachCoordinateEmptyHint}"
Foreground="#C1C8D2"
FontSize="18"
IsHitTestVisible="False">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding CoordinatePreviewPoints.Count}" Value="0">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
</Grid>
</GroupBox>
</Grid>
</ScrollViewer>
</TabItem>
</TabControl>
</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.Recipe.View
{
/// <summary>
/// MarkTeachView.xaml 的交互逻辑
/// </summary>
public partial class MarkTeachView : UserControl
{
public MarkTeachView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,503 @@
<UserControl x:Class="MainShell.Recipe.View.PidRecipeEditorView"
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:mw="http://www.maxwell-gp.com/"
mc:Ignorable="d"
d:DesignHeight="700"
d:DesignWidth="1180">
<UserControl.Resources>
<SolidColorBrush x:Key="PidPageBackgroundBrush" Color="#F4F7FB"/>
<SolidColorBrush x:Key="PidCardBackgroundBrush" Color="#FFFFFF"/>
<SolidColorBrush x:Key="PidCardBorderBrush" Color="#D6E0EA"/>
<SolidColorBrush x:Key="PidHeaderBackgroundBrush" Color="#EEF3F8"/>
<SolidColorBrush x:Key="PidHeaderForegroundBrush" Color="#2E5FA7"/>
<SolidColorBrush x:Key="PidBodyTextBrush" Color="#425466"/>
<SolidColorBrush x:Key="PidMutedTextBrush" Color="#6B7B8D"/>
<SolidColorBrush x:Key="PidValueBrush" Color="#264B86"/>
<Style x:Key="PidSectionBorderStyle" TargetType="Border">
<Setter Property="Background" Value="{StaticResource PidCardBackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource PidCardBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="4"/>
<Setter Property="Padding" Value="0"/>
</Style>
<Style x:Key="PidSectionTitleStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource PidHeaderForegroundBrush}"/>
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="PidHintTextStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource PidMutedTextBrush}"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
<Style x:Key="PidFieldLabelStyle" TargetType="TextBlock" BasedOn="{StaticResource TextBlockStyle}">
<Setter Property="Foreground" Value="{StaticResource PidBodyTextBrush}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="0,6,10,6"/>
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
<Style x:Key="PidNumericOnlyEditingTextBoxStyle" TargetType="TextBox">
<Setter Property="behavior:ControlBehavior.IsNumericOnly" Value="True"/>
<Setter Property="Padding" Value="6,0"/>
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.ActiveBorderBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Right"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="SelectionTextBrush" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
</Style>
<Style x:Key="PidNumericDisplayTextStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="TextAlignment" Value="Right"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="0"/>
</Style>
<Style x:Key="PidNumericOnlyTextBoxStyle" TargetType="TextBox">
<Setter Property="behavior:ControlBehavior.IsNumericOnly" Value="True"/>
<Setter Property="Margin" Value="4,2"/>
<Setter Property="MinWidth" Value="120"/>
<Setter Property="Height" Value="32"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style x:Key="PidPrimaryButtonStyle" TargetType="Button" BasedOn="{StaticResource StartButtonStyle}">
<Setter Property="MinWidth" Value="108"/>
<Setter Property="Height" Value="34"/>
<Setter Property="Margin" Value="0,0,8,0"/>
</Style>
<Style x:Key="PidDangerButtonStyle" TargetType="Button" BasedOn="{StaticResource CloseButtonStyle}">
<Setter Property="MinWidth" Value="108"/>
<Setter Property="Height" Value="34"/>
<Setter Property="Margin" Value="0,0,8,0"/>
</Style>
<Style x:Key="PidFilterToggleStyle" TargetType="CheckBox" BasedOn="{StaticResource ModernSwitchStyle}">
<Setter Property="Margin" Value="4,2"/>
</Style>
<Style x:Key="PidAxisComboBoxStyle" TargetType="ComboBox">
<Setter Property="Margin" Value="4,2"/>
<Setter Property="MinWidth" Value="120"/>
<Setter Property="Height" Value="32"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style x:Key="PidNumberBoxStyle" TargetType="mw:NumberBox">
<Setter Property="Margin" Value="4,2"/>
<Setter Property="MinWidth" Value="120"/>
<Setter Property="Height" Value="32"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="mw:NumericKeypadAttach.IsEnabled" Value="True"/>
</Style>
<Style x:Key="PidTabItemStyle" TargetType="TabItem">
<Setter Property="Padding" Value="20,8"/>
<Setter Property="Foreground" Value="{StaticResource PidBodyTextBrush}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Border x:Name="TabBorder"
Background="#E5E9EF"
BorderBrush="{StaticResource PidCardBorderBrush}"
BorderThickness="1,1,1,0"
Margin="0,0,2,0"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"
ContentSource="Header"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="TabBorder" Property="Background" Value="#F4F8FE"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="TabBorder" Property="Background" Value="White"/>
<Setter TargetName="TabBorder" Property="BorderBrush" Value="{StaticResource PidHeaderForegroundBrush}"/>
<Setter Property="Foreground" Value="{StaticResource PidHeaderForegroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid Background="{StaticResource PidPageBackgroundBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Margin="12,12,12,8"
Padding="12,8"
Background="White"
BorderBrush="{StaticResource PidCardBorderBrush}"
BorderThickness="1"
CornerRadius="4">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="220"/>
<ColumnDefinition Width="12"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="12"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="选择配置组:"
Style="{StaticResource PidFieldLabelStyle}"
VerticalAlignment="Center"
Margin="0,0,8,0"/>
<ComboBox Grid.Column="1"
Margin="0"
Style="{StaticResource ProcessComboBoxStyle}"
ItemsSource="{Binding AxisPIDParameters}"
DisplayMemberPath="Name"
SelectedItem="{Binding SelectedPIDProfile, Mode=TwoWay}"
VerticalAlignment="Center"/>
<Button Grid.Column="3"
Content="读取"
Style="{StaticResource PidPrimaryButtonStyle}"
Margin="0"
Click="{mw:Action ReadParameters}"/>
<Button Grid.Column="5"
Content="写入"
Style="{StaticResource PidPrimaryButtonStyle}"
Margin="0"
Click="{mw:Action WriteParameters}"/>
</Grid>
</Border>
<Border Grid.Row="1"
Margin="12,0,12,8"
Background="White"
BorderBrush="{StaticResource PidCardBorderBrush}"
BorderThickness="1"
CornerRadius="4">
<TabControl Background="Transparent"
BorderThickness="0"
SelectedIndex="{Binding SelectedParameterTabIndex, Mode=TwoWay}"
ItemContainerStyle="{StaticResource PidTabItemStyle}">
<TabItem Header="PID 参数">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
Margin="12,8,12,6"
Text="每个行对应一个轴的速度与位置环参数。"
Style="{StaticResource PidHintTextStyle}"
Foreground="{StaticResource PidHeaderForegroundBrush}"/>
<ScrollViewer Grid.Row="1"
Margin="12,0,12,8"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<DataGrid ItemsSource="{Binding SelectedAxes}"
SelectedItem="{Binding SelectedAxisParameter, Mode=TwoWay}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
MinHeight="420"
MinWidth="1100"
ScrollViewer.CanContentScroll="True"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTemplateColumn Header="轴 (Axis)" Width="180">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ModuleName}" VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.AxisOptions, RelativeSource={RelativeSource AncestorType=UserControl}}"
DisplayMemberPath="AxisName"
SelectedValuePath="AxisName"
SelectedValue="{Binding ModuleName, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource PidAxisComboBoxStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="SLVKP" Width="100"
Binding="{Binding PA_SLVKP.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLVKI" Width="100"
Binding="{Binding PA_SLVKI.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLVKPSF" Width="110"
Binding="{Binding PA_SLVKPSF.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLVKPIF" Width="110"
Binding="{Binding PA_SLVKPIF.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLVKISF" Width="110"
Binding="{Binding PA_SLVKISF.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLVKIIF" Width="110"
Binding="{Binding PA_SLVKIIF.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLPKP" Width="100"
Binding="{Binding PA_SLPKP.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLPKPIF" Width="110"
Binding="{Binding PA_SLPKPIF.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLPKPSF" Width="110"
Binding="{Binding PA_SLPKPSF.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="SLAFF" Width="100"
Binding="{Binding PA_SLAFF.Value, UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource PidNumericDisplayTextStyle}"
EditingElementStyle="{StaticResource PidNumericOnlyEditingTextBoxStyle}"/>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
<WrapPanel Grid.Row="2" Margin="12,0,12,12">
<Button Content="新增轴参数"
Style="{StaticResource PidPrimaryButtonStyle}"
Click="{mw:Action AddAxis}"/>
<Button Content="删除轴参数"
Style="{StaticResource PidDangerButtonStyle}"
Click="{mw:Action DeleteAxis}"/>
</WrapPanel>
</Grid>
</TabItem>
<TabItem Header="滤波参数">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="8"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
Margin="12,8,12,6"
Text="每个行对应一个轴的滤波参数设置,请根据机械共振频率调整滤波参数。"
Style="{StaticResource PidHintTextStyle}"
Foreground="{StaticResource PidHeaderForegroundBrush}"/>
<Grid Grid.Row="1" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Margin="0,0,0,6"
Text="陷波参数"
Style="{StaticResource PidSectionTitleStyle}"/>
<ScrollViewer Grid.Row="1"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<DataGrid ItemsSource="{Binding SelectedFilteringParameters}"
SelectedItem="{Binding SelectedNotchFilteringParameter, Mode=TwoWay}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
MinHeight="200"
MinWidth="900"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTemplateColumn Header="轴名称" Width="180">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding AxisDisplayName}" VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.AxisOptions, RelativeSource={RelativeSource AncestorType=UserControl}}"
DisplayMemberPath="AxisName"
SelectedValuePath="AxisIndex"
SelectedValue="{Binding AxisIndex, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource PidAxisComboBoxStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridCheckBoxColumn Header="开启陷波" Width="90"
Binding="{Binding IsUseNotch.Value, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTemplateColumn Header="陷波频率 (Hz)" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding NotchFrequency.Value}" Style="{StaticResource PidNumericDisplayTextStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<mw:NumberBox Value="{Binding NotchFrequency.Value, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource PidNumberBoxStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="陷波宽度" Width="110">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding NotchWidth.Value}" Style="{StaticResource PidNumericDisplayTextStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<mw:NumberBox Value="{Binding NotchWidth.Value, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource PidNumberBoxStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="衰减" Width="110">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding NotchFalloff.Value}" Style="{StaticResource PidNumericDisplayTextStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<mw:NumberBox Value="{Binding NotchFalloff.Value, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource PidNumberBoxStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Grid>
<Grid Grid.Row="3" Margin="12,0,12,8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Margin="0,0,0,6"
Text="低通参数"
Style="{StaticResource PidSectionTitleStyle}"/>
<ScrollViewer Grid.Row="1"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<DataGrid ItemsSource="{Binding SelectedFilteringParameters}"
SelectedItem="{Binding SelectedLowPassFilteringParameter, Mode=TwoWay}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
MinHeight="200"
MinWidth="760"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTemplateColumn Header="轴名称" Width="180">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding AxisDisplayName}" VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.AxisOptions, RelativeSource={RelativeSource AncestorType=UserControl}}"
DisplayMemberPath="AxisName"
SelectedValuePath="AxisIndex"
SelectedValue="{Binding AxisIndex, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource PidAxisComboBoxStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridCheckBoxColumn Header="开启低通" Width="90"
Binding="{Binding IsUseFiltering.Value, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTemplateColumn Header="低通频率 (Hz)" Width="130">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FilteringFrequency.Value}" Style="{StaticResource PidNumericDisplayTextStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<mw:NumberBox Value="{Binding FilteringFrequency.Value, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource PidNumberBoxStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="阻尼系数" Width="130">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FilteringDamping.Value}" Style="{StaticResource PidNumericDisplayTextStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<mw:NumberBox Value="{Binding FilteringDamping.Value, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource PidNumberBoxStyle}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Grid>
<WrapPanel Grid.Row="4" Margin="12,0,12,12">
<Button Content="新增滤波参数"
Style="{StaticResource PidPrimaryButtonStyle}"
Click="{mw:Action AddFilteringParameter}"/>
<Button Content="删除滤波参数"
Style="{StaticResource PidDangerButtonStyle}"
Click="{mw:Action DeleteFilteringParameter}"/>
</WrapPanel>
</Grid>
</TabItem>
</TabControl>
</Border>
<Border Grid.Row="2"
Margin="12,0,12,12"
Padding="12,8"
Background="White"
BorderBrush="{StaticResource PidCardBorderBrush}"
BorderThickness="1"
CornerRadius="4">
<TextBlock Text="说明PID 配置组由程序初始化;每个配置组对应一组 PID 参数和滤波参数。"
Style="{StaticResource PidHintTextStyle}"/>
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,15 @@
using System.Windows.Controls;
namespace MainShell.Recipe.View
{
/// <summary>
/// PidRecipeEditorView.xaml 的交互逻辑
/// </summary>
public partial class PidRecipeEditorView : UserControl
{
public PidRecipeEditorView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,164 @@
<UserControl x:Class="MainShell.Recipe.View.ProcessCompensationView"
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="500"
d:DesignWidth="960">
<Grid Background="#F4F7FB">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Margin="12,12,12,8"
Padding="12,10"
Background="White"
BorderBrush="#D6E0EA"
BorderThickness="1"
CornerRadius="4">
<StackPanel>
<TextBlock Text="补偿参数"
Foreground="#2E5FA7"
FontSize="15"
FontWeight="Bold"/>
<TextBlock Margin="0,4,0,0"
Text="当前工艺配方支持对 PHS-X1、PHS-Y1、WS-X、Stage-Y 四个轴分别设置补偿值。"
Foreground="#6B7B8D"
FontSize="12"
TextWrapping="Wrap"/>
</StackPanel>
</Border>
<Border Grid.Row="1"
Margin="12,0,12,12"
Background="White"
BorderBrush="#D6E0EA"
BorderThickness="1"
CornerRadius="4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Padding="14,10"
Background="#EEF3F8"
BorderBrush="#D6E0EA"
BorderThickness="0,0,0,1"
CornerRadius="4,4,0,0">
<TextBlock Text="轴补偿设置"
Foreground="#2E5FA7"
FontSize="15"
FontWeight="Bold"/>
</Border>
<Grid Grid.Row="1" Margin="16">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180"/>
<ColumnDefinition Width="180"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0"
Grid.Column="0"
VerticalAlignment="Center"
Foreground="#2E5FA7"
FontSize="14"
FontWeight="Bold"
Text="PHS-X1"/>
<mw:NumberBox Grid.Row="0"
Grid.Column="1"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding PhsX1Compensation, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DecimalPlaces="4"
mw:NumericKeypadAttach.IsEnabled="True"
ShowUpDownButton="True"/>
<TextBlock Grid.Row="0"
Grid.Column="2"
Margin="8,0,0,0"
VerticalAlignment="Center"
Foreground="#6B7B8D"
Text="mm"/>
<TextBlock Grid.Row="1"
Grid.Column="0"
Margin="0,12,0,0"
VerticalAlignment="Center"
Foreground="#2E5FA7"
FontSize="14"
FontWeight="Bold"
Text="PHS-Y1"/>
<mw:NumberBox Grid.Row="1"
Grid.Column="1"
Margin="8,12,0,0"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding PhsY1Compensation, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DecimalPlaces="4"
mw:NumericKeypadAttach.IsEnabled="True"
ShowUpDownButton="True"/>
<TextBlock Grid.Row="1"
Grid.Column="2"
Margin="8,12,0,0"
VerticalAlignment="Center"
Foreground="#6B7B8D"
Text="mm"/>
<TextBlock Grid.Row="2"
Grid.Column="0"
Margin="0,12,0,0"
VerticalAlignment="Center"
Foreground="#2E5FA7"
FontSize="14"
FontWeight="Bold"
Text="WS-X"/>
<mw:NumberBox Grid.Row="2"
Grid.Column="1"
Margin="8,12,0,0"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding WsXCompensation, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DecimalPlaces="4"
mw:NumericKeypadAttach.IsEnabled="True"
ShowUpDownButton="True"/>
<TextBlock Grid.Row="2"
Grid.Column="2"
Margin="8,12,0,0"
VerticalAlignment="Center"
Foreground="#6B7B8D"
Text="mm"/>
<TextBlock Grid.Row="3"
Grid.Column="0"
Margin="0,12,0,0"
VerticalAlignment="Center"
Foreground="#2E5FA7"
FontSize="14"
FontWeight="Bold"
Text="Stage-Y"/>
<mw:NumberBox Grid.Row="3"
Grid.Column="1"
Margin="8,12,0,0"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding StageYCompensation, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DecimalPlaces="4"
mw:NumericKeypadAttach.IsEnabled="True"
ShowUpDownButton="True"/>
<TextBlock Grid.Row="3"
Grid.Column="2"
Margin="8,12,0,0"
VerticalAlignment="Center"
Foreground="#6B7B8D"
Text="mm"/>
</Grid>
</Grid>
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,15 @@
using System.Windows.Controls;
namespace MainShell.Recipe.View
{
/// <summary>
/// ProcessCompensationView.xaml 的交互逻辑
/// </summary>
public partial class ProcessCompensationView : UserControl
{
public ProcessCompensationView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,66 @@
<UserControl x:Class="MainShell.Recipe.View.ProcessRecipeView"
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.Recipe.View"
mc:Ignorable="d"
d:DesignHeight="720" d:DesignWidth="1180">
<UserControl.Resources>
<SolidColorBrush x:Key="ProcessRecipePageBackgroundBrush" Color="#F4F7FB"/>
<SolidColorBrush x:Key="ProcessRecipeTabBorderBrush" Color="#D6E0EA"/>
<SolidColorBrush x:Key="ProcessRecipeTabHeaderBrush" Color="#425466"/>
<SolidColorBrush x:Key="ProcessRecipeTabHoverBrush" Color="#F4F8FE"/>
<SolidColorBrush x:Key="ProcessRecipeTabSelectedBrush" Color="#FFFFFF"/>
<SolidColorBrush x:Key="ProcessRecipeTabAccentBrush" Color="#2E5FA7"/>
<Style x:Key="ProcessRecipeTabItemStyle" TargetType="TabItem">
<Setter Property="Padding" Value="28,12"/>
<Setter Property="Foreground" Value="{StaticResource ProcessRecipeTabHeaderBrush}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Border x:Name="TabBorder"
Background="#E9EEF4"
BorderBrush="{StaticResource ProcessRecipeTabBorderBrush}"
BorderThickness="1,1,1,0"
Margin="0,0,6,0"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"
ContentSource="Header"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="TabBorder" Property="Background" Value="{StaticResource ProcessRecipeTabHoverBrush}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="TabBorder" Property="Background" Value="{StaticResource ProcessRecipeTabSelectedBrush}"/>
<Setter TargetName="TabBorder" Property="BorderBrush" Value="{StaticResource ProcessRecipeTabAccentBrush}"/>
<Setter Property="Foreground" Value="{StaticResource ProcessRecipeTabAccentBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid Background="{StaticResource ProcessRecipePageBackgroundBrush}">
<Border Margin="12"
Background="White"
BorderBrush="{StaticResource ProcessRecipeTabBorderBrush}"
BorderThickness="1">
<TabControl Background="Transparent"
BorderThickness="0"
ItemContainerStyle="{StaticResource ProcessRecipeTabItemStyle}">
<TabItem Header="PID参数">
<local:PidRecipeEditorView/>
</TabItem>
<TabItem Header="补偿参数">
<local:ProcessCompensationView DataContext="{Binding ProcessCompensationViewModel}"/>
</TabItem>
</TabControl>
</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.Recipe.View
{
/// <summary>
/// ProcessRecipeView.xaml 的交互逻辑
/// </summary>
public partial class ProcessRecipeView : UserControl
{
public ProcessRecipeView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,71 @@
<UserControl x:Class="MainShell.Recipe.View.RecipeButtonGroupView"
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.Recipe.View"
mc:Ignorable="d"
>
<Border Background="#EBEEF3">
<StackPanel>
<UniformGrid Margin="2" Columns="2" Rows="4">
<Button Command="{Binding RecipeButtonGroupViewModel.CreateNewCmd}" CommandParameter="{Binding}" ToolTip="{DynamicResource New}" Style="{StaticResource iconButton}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xe600;" Foreground="Blue" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource New}" />
</StackPanel>
</Button>
<Button Command="{Binding RecipeButtonGroupViewModel.ApplyCmd}" CommandParameter="{Binding}" ToolTip="{DynamicResource Apply}" Style="{StaticResource iconButton}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xebdf;" Foreground="Blue" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource Apply}" />
</StackPanel>
</Button>
<Button Command="{Binding RecipeButtonGroupViewModel.ReNameCmd}" CommandParameter="{Binding }" ToolTip="{DynamicResource ReName}" Style="{StaticResource iconButton}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xe618;" Foreground="#7CEAB8" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource ReName}" />
</StackPanel>
</Button>
<Button Command="{Binding RecipeButtonGroupViewModel.DeleteCmd}" CommandParameter="{Binding}" ToolTip="{DynamicResource Delete}" Style="{StaticResource iconButton}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xe630;" Foreground="Red" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource Delete}" />
</StackPanel>
</Button>
<Button Command="{Binding RecipeButtonGroupViewModel.CopyCmd}" CommandParameter="{Binding }" ToolTip="{DynamicResource Copy}" Style="{StaticResource iconButton}" IsEnabled="{Binding CanCopyRecipe}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xe67e;" Foreground="Blue" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource Copy}" />
</StackPanel>
</Button>
<Button Command="{Binding RecipeButtonGroupViewModel.ClearCmd}" CommandParameter="{Binding }" ToolTip="{DynamicResource Clear}" Style="{StaticResource iconButton}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xe60c;" Foreground="Red" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource Clear}" />
</StackPanel>
</Button>
<Button Command="{Binding RecipeButtonGroupViewModel.ImportCmd}" CommandParameter="{Binding }" ToolTip="{DynamicResource Import}" Style="{StaticResource iconButton}" IsEnabled="{Binding CanImportRecipe}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xe664;" Foreground="#5462E6" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource Import}" />
</StackPanel>
</Button>
<Button Command="{Binding RecipeButtonGroupViewModel.ExportCmd}" CommandParameter="{Binding }" ToolTip="{DynamicResource Export}" Style="{StaticResource iconButton}" IsEnabled="{Binding CanExportRecipe}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xe667;" Foreground="#5462E6" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource Export}" />
</StackPanel>
</Button>
</UniformGrid>
<Button Command="{Binding RecipeButtonGroupViewModel.SaveCmd}" CommandParameter="{Binding }" Width="140" ToolTip="{DynamicResource Save}" Style="{StaticResource iconButton}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="&#xec09;" Foreground="#007BFF" FontSize="16" FontFamily="{StaticResource ttfFont}" VerticalAlignment="Center" />
<TextBlock Margin="4,0" Text="{DynamicResource Save}" />
</StackPanel>
</Button>
</StackPanel>
</Border>
</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.Recipe.View
{
/// <summary>
/// RecipeButtonGroupView.xaml 的交互逻辑
/// </summary>
public partial class RecipeButtonGroupView : UserControl
{
public RecipeButtonGroupView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,76 @@
<Window x:Class="MainShell.Recipe.View.RecipeNameWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MainShell.Recipe.View"
xmlns:common="clr-namespace:MainShell.Common"
mc:Ignorable="d"
common:WindowService.DialogResult="{Binding DialogResult}"
Title="RecipeNameWindow"
ResizeMode="NoResize"
AllowsTransparency="True"
WindowStartupLocation="CenterOwner"
WindowStyle="None"
Background="Transparent"
Height="180" Width="380"
Loaded="Window_Loaded">
<Border
Background="#F8F8F8"
CornerRadius="10"
BorderBrush="#E8E8E8"
BorderThickness="1"
MouseDown="Window_MouseDown">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock
Style="{StaticResource LabelStyle}"
Text="{DynamicResource CreateRecipe}"
HorizontalAlignment="Center"
FontSize="18"
FontFamily="Segoe UI"
FontWeight="Bold"
Foreground="#424A4D"
Margin="10,10,0,0"/>
<StackPanel Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="请输入新配方的名称:" FontSize="14" VerticalAlignment="Center" Foreground="#555555" Margin="0,0,0,8"/>
<TextBox x:Name="RecipeNameTextBox" Width="260" Height="34" Padding="10,0" FontSize="15"
VerticalContentAlignment="Center" BorderThickness="1" BorderBrush="#CCCCCC"
Background="White"
Text="{Binding RecipeName, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock
Text="{Binding ValidationMessage}"
Foreground="Red"
Margin="4,2,0,0"
FontSize="12"
TextWrapping="Wrap">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<!-- 当 Text 为空时折叠 -->
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Margin="20,0,20,20">
<Button Content="确认" IsDefault="True" Style="{StaticResource StartButtonStyle}"
Command="{Binding OkCommand}"/>
<Button Content="取消" IsCancel="True" Style="{StaticResource CloseButtonStyle}" Margin="0,0,10,0"
Command="{Binding CancelCommand}"/>
</StackPanel>
</Grid>
</Border>
</Window>

View File

@@ -0,0 +1,47 @@
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.Shapes;
using System.Windows.Threading;
namespace MainShell.Recipe.View
{
/// <summary>
/// RecipeNameWindow.xaml 的交互逻辑
/// </summary>
public partial class RecipeNameWindow : Window
{
public RecipeNameWindow()
{
InitializeComponent();
}
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
this.DragMove();
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// 使用 Dispatcher 确保控件已可交互,然后设置键盘焦点并全选文本
Dispatcher.BeginInvoke(new Action(() =>
{
RecipeNameTextBox.Focus();
Keyboard.Focus(RecipeNameTextBox);
RecipeNameTextBox.SelectAll();
}), DispatcherPriority.Input);
}
}
}

View File

@@ -0,0 +1,83 @@
<Window x:Class="MainShell.Recipe.View.RecipeReNameWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MainShell.Recipe.View"
xmlns:common="clr-namespace:MainShell.Common"
mc:Ignorable="d"
common:WindowService.DialogResult="{Binding DialogResult}"
Title="RecipeNameWindow"
ResizeMode="NoResize"
AllowsTransparency="True"
WindowStartupLocation="CenterOwner"
WindowStyle="None"
Background="Transparent"
Height="240" Width="380"
Loaded="Window_Loaded"
>
<Border
Background="#F8F8F8"
CornerRadius="10"
BorderBrush="#E8E8E8"
BorderThickness="1"
MouseDown="Window_MouseDown">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock
Style="{StaticResource LabelStyle}"
Text="{DynamicResource ReNameRecipe}"
HorizontalAlignment="Center"
FontSize="18"
FontFamily="Segoe UI"
FontWeight="Bold"
Foreground="#424A4D"
Margin="10,10,0,0"/>
<StackPanel Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="配方旧名称:" FontSize="14" VerticalAlignment="Center" Foreground="#555555" Margin="0,0,0,8"/>
<TextBox x:Name="OldRecipeNameTextBox" Width="260" Height="34" Padding="10,0" FontSize="15"
VerticalContentAlignment="Center" BorderThickness="1" BorderBrush="#CCCCCC"
Background="White"
IsReadOnly="True"
Text="{Binding OldRecipeName}"/>
<TextBlock Text="请输入新名称:" FontSize="14" VerticalAlignment="Center" Foreground="#555555" Margin="0,0,0,8"/>
<TextBox x:Name="RecipeNameTextBox" Width="260" Height="34" Padding="10,0" FontSize="15"
VerticalContentAlignment="Center" BorderThickness="1" BorderBrush="#CCCCCC"
Background="White"
Text="{Binding RecipeName, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock
Text="{Binding ValidationMessage}"
Foreground="Red"
Margin="4,2,0,0"
FontSize="12"
TextWrapping="Wrap">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<!-- 当 Text 为空时折叠 -->
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Margin="20,0,20,20">
<Button Content="确认" IsDefault="True" Style="{StaticResource StartButtonStyle}"
Command="{Binding OkCommand}"/>
<Button Content="取消" IsCancel="True" Style="{StaticResource CloseButtonStyle}" Margin="0,0,10,0"
Command="{Binding CancelCommand}"/>
</StackPanel>
</Grid>
</Border>
</Window>

View File

@@ -0,0 +1,47 @@
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.Shapes;
using System.Windows.Threading;
namespace MainShell.Recipe.View
{
/// <summary>
/// RecipeReNameWindow.xaml 的交互逻辑
/// </summary>
public partial class RecipeReNameWindow : Window
{
public RecipeReNameWindow()
{
InitializeComponent();
}
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
this.DragMove();
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// 使用 Dispatcher 确保控件已可交互,然后设置键盘焦点并全选文本
Dispatcher.BeginInvoke(new Action(() =>
{
RecipeNameTextBox.Focus();
Keyboard.Focus(RecipeNameTextBox);
RecipeNameTextBox.SelectAll();
}), DispatcherPriority.Input);
}
}
}

View File

@@ -0,0 +1,101 @@
<UserControl x:Class="MainShell.Recipe.View.RecipeView"
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.Recipe.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="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Margin="-40,0,0,0" Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<mw:SideMenu ItemsSource="{Binding MenuItemWraps}"
SelectedItem="{Binding SelectedMenuItem, Mode=TwoWay}"
PreviewMouseLeftButtonDown="SideMenu_PreviewMouseLeftButtonDown"
Grid.Row ="0" Width="150"
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>
</Grid>
<Grid Grid.Column="1">
<GroupBox Width="200" x:Name="groupList" Header="{DynamicResource RecipeList}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox x:Name="recipeList" SelectedItem="{Binding CurrentScreen.SelectedRecipeWrap, Mode=TwoWay}" Style="{StaticResource recipeListBoxStyle}"
PreviewMouseLeftButtonDown="RecipeList_PreviewMouseLeftButtonDown"
ItemsSource="{Binding CurrentScreen.RecipeWraps}"
d:ItemsSource="{d:SampleData ItemCount=5}"/>
<Border DataContext="{Binding ElementName=recipeList, Path=SelectedItem}" BorderThickness="1" BorderBrush="AliceBlue" Grid.Row="1">
<ScrollViewer>
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="创建时间:"/>
<TextBlock TextWrapping="Wrap" Text="{Binding CreateTime, Converter={StaticResource DateTimeToStringConverter}}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="修改时间:"/>
<TextBlock TextWrapping="Wrap" Text="{Binding ModifiedTime, Converter={StaticResource DateTimeToStringConverter}}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="描述:"/>
</StackPanel>
</StackPanel>
</ScrollViewer>
</Border>
<Border Grid.Row="2">
<local:RecipeButtonGroupView DataContext="{Binding CurrentScreen}" />
</Border>
</Grid>
</GroupBox>
<ToggleButton x:Name="toggleBtn" HorizontalAlignment="Right" Style="{StaticResource ToggleBtnSideBarStyle}"
IsChecked="{Binding IsRecipePanelHidden, Mode=TwoWay}">
<ToggleButton.Triggers>
<EventTrigger RoutedEvent="ToggleButton.Checked">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="groupList" Storyboard.TargetProperty="(FrameworkElement.Width)" To="0" Duration="0:0:0.2"/>
<ThicknessAnimation Storyboard.TargetName="toggleBtn"
Storyboard.TargetProperty="(FrameworkElement.Margin)"
To="-30,0,0,0" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="ToggleButton.Unchecked">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="groupList" Storyboard.TargetProperty="(FrameworkElement.Width)" To="200" Duration="0:0:0.2"/>
<ThicknessAnimation Storyboard.TargetName="toggleBtn"
Storyboard.TargetProperty="(FrameworkElement.Margin)"
To="0,0,0,0" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ToggleButton.Triggers>
</ToggleButton>
</Grid>
<ContentControl Margin="5,0" Grid.Column="2" mw:View.Model="{Binding CurrentScreen}"/>
</Grid>
</UserControl>

View File

@@ -0,0 +1,106 @@
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;
using System.Windows.Controls.Primitives;
using MainShell.Common;
using MainShell.Models;
using MainShell.Recipe.Models;
using MainShell.Recipe.ViewModel;
namespace MainShell.Recipe.View
{
/// <summary>
/// RecipeView.xaml 的交互逻辑
/// </summary>
public partial class RecipeView : UserControl
{
public RecipeView()
{
InitializeComponent();
}
private void SideMenu_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var viewModel = DataContext as RecipeViewModel;
if (viewModel == null)
return;
FocusedEditorCommitHelper.CommitFocusedEditorChanges();
var targetMenuItem = FindMenuItemWrap(e.OriginalSource as DependencyObject);
if (targetMenuItem == null)
return;
e.Handled = true;
viewModel.TrySelectMenuItem(targetMenuItem);
}
private void RecipeList_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var viewModel = DataContext as RecipeViewModel;
if (viewModel == null)
return;
FocusedEditorCommitHelper.CommitFocusedEditorChanges();
var targetRecipeWrap = FindDataContext<RecipeWrap>(e.OriginalSource as DependencyObject);
if (targetRecipeWrap == null)
return;
e.Handled = true;
viewModel.TrySelectRecipeWrap(targetRecipeWrap);
}
private static MenuItemWrap FindMenuItemWrap(DependencyObject dependencyObject)
{
return FindDataContext<MenuItemWrap>(dependencyObject);
}
private static T FindDataContext<T>(DependencyObject dependencyObject) where T : class
{
var current = dependencyObject;
while (current != null)
{
if (current is FrameworkElement frameworkElement && frameworkElement.DataContext is T dataContext)
{
return dataContext;
}
if (current is FrameworkContentElement frameworkContentElement && frameworkContentElement.DataContext is T contentDataContext)
{
return contentDataContext;
}
current = GetParent(current);
}
return null;
}
private static DependencyObject GetParent(DependencyObject dependencyObject)
{
if (dependencyObject is FrameworkElement frameworkElement)
{
return frameworkElement.Parent ?? VisualTreeHelper.GetParent(frameworkElement);
}
if (dependencyObject is FrameworkContentElement frameworkContentElement)
{
return frameworkContentElement.Parent;
}
return null;
}
}
}

View File

@@ -0,0 +1,192 @@
<UserControl x:Class="MainShell.Recipe.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:behavior="clr-namespace:MainShell.Common.ControlAttribute"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="900">
<UserControl.Resources>
<Style x:Key="NumericOnlyEditingTextBoxStyle" TargetType="TextBox">
<Setter Property="behavior:ControlBehavior.IsNumericOnly" Value="True"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="6,2"/>
</Style>
<Style x:Key="DataGridRowStyle" TargetType="DataGridRow">
<Setter Property="Background" Value="White"/>
<Style.Triggers>
<Trigger Property="AlternationIndex" Value="1">
<Setter Property="Background" Value="#F7FBFF"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0"
Margin="8,8,8,4"
Header="测高模式"
Style="{StaticResource GroupBoxSecondary}">
<Border Margin="10"
Padding="12"
Background="#F7FBFF"
BorderBrush="#D7E6F5"
BorderThickness="1"
CornerRadius="6">
<StackPanel>
<TextBlock Text="支持标准示教位置与行列偏移两种测高点配置方式"
Foreground="#4A6178"
Margin="0,0,0,12"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<RadioButton Content="标准示教位置"
IsChecked="{Binding Mode, Mode=TwoWay, Converter={StaticResource SubstrateHeightMeasureModeToBoolConverter}, ConverterParameter=0}"
VerticalAlignment="Center"
FontWeight="SemiBold"
Margin="0,0,24,0"/>
<RadioButton Content="行列坐标 + 偏移补偿"
IsChecked="{Binding Mode, Mode=TwoWay, Converter={StaticResource SubstrateHeightMeasureModeToBoolConverter}, ConverterParameter=1}"
VerticalAlignment="Center"
FontWeight="SemiBold"/>
</StackPanel>
</StackPanel>
</Border>
</GroupBox>
<GroupBox Grid.Row="1"
Margin="8,4,8,8"
Header="测高点设置"
Style="{StaticResource GroupBoxSecondary}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<DockPanel Grid.Row="0" Margin="8,8,8,4" LastChildFill="False">
<StackPanel DockPanel.Dock="Left">
<TextBlock Text="测高点列表"
FontSize="16"
FontWeight="Bold"
Foreground="#24415C"/>
<TextBlock Text="当前模式下可维护测高点并编辑对应参数"
Margin="0,4,0,0"
Foreground="#6B7F92"/>
</StackPanel>
<WrapPanel DockPanel.Dock="Right" Orientation="Horizontal" Margin="12,0,0,0">
<Button Content="添加测高点"
Style="{StaticResource StartButtonStyle}"
Command="{Binding AddPointCmd}"
Margin="4"/>
<Button Content="删除测高点"
Style="{StaticResource CloseButtonStyle}"
Command="{Binding DeletePointCmd}"
Margin="4"/>
<Button Content="示教当前位置"
Style="{StaticResource TeachButtonStyle}"
Command="{Binding TeachPointCmd}"
IsEnabled="{Binding IsTeachMode}"
Margin="4"/>
</WrapPanel>
</DockPanel>
<Border Grid.Row="1"
Margin="8,4,8,4"
Padding="10,8"
Background="#F7FBFF"
BorderBrush="#D7E6F5"
BorderThickness="1"
CornerRadius="6"
Visibility="{Binding IsRowColumnMode, Converter={StaticResource BoolToVisibleConverter}}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="统一偏移补偿:"
VerticalAlignment="Center"
Margin="0,0,8,0"
Foreground="#4A6178"/>
<TextBlock Grid.Column="1"
Text="X"
VerticalAlignment="Center"
Margin="0,0,4,0"/>
<mw:NumberBox Grid.Column="2"
Width="100"
Margin="0,0,10,0"
VerticalContentAlignment="Center"
Value="{Binding CommonOffsetCompensation.X, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Grid.Column="3"
Text="Y"
VerticalAlignment="Center"
Margin="0,0,4,0"/>
<mw:NumberBox Grid.Column="4"
Width="100"
Margin="0,0,10,0"
VerticalContentAlignment="Center"
Value="{Binding CommonOffsetCompensation.Y, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Grid.Column="5"
Text="可先统一写入,再对个别点单独修正"
VerticalAlignment="Center"
Margin="0,0,12,0"
TextWrapping="Wrap"
Foreground="#6B7F92"/>
<Button Grid.Column="6"
Content="一键写入全部点位"
Width="120"
Style="{StaticResource VisionButtonStyle}"
Command="{Binding ApplyOffsetToAllCmd}"
Margin="12,0,0,0"/>
</Grid>
</Border>
<Grid Grid.Row="2" Margin="8,4,8,8">
<Grid Visibility="{Binding IsTeachMode, Converter={StaticResource BoolToVisibleConverter}}">
<DataGrid ItemsSource="{Binding Points}"
SelectedItem="{Binding SelectedPoint}"
AutoGenerateColumns="False"
CanUserAddRows="False"
MinHeight="140"
AlternationCount="2"
RowStyle="{StaticResource DataGridRowStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header="点位名称" Width="1.4*" Binding="{Binding PointName, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="标准位置 X" Width="*" Binding="{Binding TeachPosition.X, UpdateSourceTrigger=PropertyChanged, StringFormat=F4}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="标准位置 Y" Width="*" Binding="{Binding TeachPosition.Y, UpdateSourceTrigger=PropertyChanged, StringFormat=F4}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<Grid Visibility="{Binding IsRowColumnMode, Converter={StaticResource BoolToVisibleConverter}}">
<DataGrid ItemsSource="{Binding Points}"
SelectedItem="{Binding SelectedPoint}"
AutoGenerateColumns="False"
CanUserAddRows="False"
MinHeight="140"
AlternationCount="2"
RowStyle="{StaticResource DataGridRowStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header="点位名称" Width="1.4*" Binding="{Binding PointName, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="行坐标" Width="*" Binding="{Binding RowIndex, UpdateSourceTrigger=PropertyChanged}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="列坐标" Width="*" Binding="{Binding ColumnIndex, UpdateSourceTrigger=PropertyChanged}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="偏移补偿 X" Width="*" Binding="{Binding OffsetCompensation.X, UpdateSourceTrigger=PropertyChanged, StringFormat=F4}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
<DataGridTextColumn Header="偏移补偿 Y" Width="*" Binding="{Binding OffsetCompensation.Y, UpdateSourceTrigger=PropertyChanged, StringFormat=F4}" EditingElementStyle="{StaticResource NumericOnlyEditingTextBoxStyle}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
</Grid>
</GroupBox>
</Grid>
</UserControl>

View File

@@ -0,0 +1,12 @@
using System.Windows.Controls;
namespace MainShell.Recipe.View
{
public partial class SubstrateHeightMeasureView : UserControl
{
public SubstrateHeightMeasureView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,136 @@
<UserControl x:Class="MainShell.Recipe.View.SubstrateRecipeView"
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.Recipe.View"
xmlns:mw="http://www.maxwell-gp.com/"
mc:Ignorable="d"
d:DesignHeight="700" d:DesignWidth="800">
<TabControl mw:TabControlAttach.HeaderWidth="Auto"
SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}">
<TabItem Header="{DynamicResource BaseSetting}" Style="{StaticResource TabItemHorizontalStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="240"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<GroupBox Header="{DynamicResource SubstrateInfo}" Style="{StaticResource GroupBoxSecondary}">
<GroupBox.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource TextBlockStyle}"></Style>
</GroupBox.Resources>
<UniformGrid DataContext="{Binding SubstrateRecipe.SubstrateInfo}" Columns="2" Rows="14">
<TextBlock Text="{DynamicResource SubstrateWidth}"/>
<mw:NumberBox Value="{Binding SubstrateSize.Width,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource SubstrateHeight}"/>
<mw:NumberBox Value="{Binding SubstrateSize.Height,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource SubstrateThickness}"/>
<mw:NumberBox Value="{Binding ThickNess,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource SubstratePiexlWidth}"/>
<mw:NumberBox Value="{Binding PadSize.Width,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource SubstratePiexlHeight}"/>
<mw:NumberBox Value="{Binding PadSize.Height,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource SubstratePitchX}"/>
<mw:NumberBox Value="{Binding PitchX,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource SubstratePitchY}"/>
<mw:NumberBox Value="{Binding PitchY,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource SubstrateRowNum}"/>
<mw:NumberBox Value="{Binding RowNumber,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource SubstrateColNum}"/>
<mw:NumberBox Value="{Binding ColNumber,UpdateSourceTrigger=PropertyChanged}" mw:NumericKeypadAttach.IsEnabled="True"/>
</UniformGrid>
</GroupBox>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<GroupBox BorderThickness="0,1,0,1"
Style="{StaticResource GroupBoxSecondary}"
Header="{DynamicResource WaferRecipesSelect}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid x:Name="waferInfo"
AutoGenerateColumns="False"
SelectionMode="Single"
ItemsSource="{Binding SubstrateRecipe.WaferSelectInfos}"
mw:DataGridAttach.ShowRowNumber="True">
<DataGrid.Columns>
<DataGridComboBoxColumn Width="*" TextBinding="{Binding WaferRecipeName}" Header="{DynamicResource WaferRecipe}">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}, Path=DataContext.WaferRecipes}" />
<Setter Property="DisplayMemberPath" Value="RecipeName"/>
<Setter Property="SelectedIndex" Value="0"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTemplateColumn Width="100" Header="{DynamicResource SubstrateOffsetX}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<mw:NumberBox BorderBrush="Transparent"
Background="Transparent"
HorizontalAlignment="Center"
HorizontalContentAlignment="Center"
Value="{Binding OffsetX}"
mw:NumericKeypadAttach.IsEnabled="True"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="100" Header="{DynamicResource SubstrateOffsetY}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<mw:NumberBox BorderBrush="Transparent"
Background="Transparent"
HorizontalAlignment="Center"
HorizontalContentAlignment="Center"
Value="{Binding OffsetY}"
mw:NumericKeypadAttach.IsEnabled="True"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="100"
Header="{DynamicResource InUse}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Style="{StaticResource ModernCheckBoxStyle}" IsChecked="{Binding IsUse, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Border Grid.Row="1" Background="#F0F6F7">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Style="{StaticResource StartButtonStyle}" Click="{mw:Action AddWaferSelectInfo}" Content="{DynamicResource Add}" Margin="4,2"/>
<Button Style="{StaticResource CloseButtonStyle}"
Command="{Binding DeleteSelectWaferInfoCmd}"
CommandParameter="{Binding ElementName=waferInfo, Path=SelectedItem}"
Content="{DynamicResource Delete}" Margin="4,2"/>
</StackPanel>
</Border>
</Grid>
</GroupBox>
<GroupBox Grid.Row="1" Header="{DynamicResource LogisticsInfo}">
</GroupBox>
</Grid>
</Grid>
</TabItem>
<TabItem Header="参数示教">
<ContentControl mw:View.Model="{Binding SubstrateTeachViewModel}"/>
</TabItem>
<TabItem Header="测高设置">
<local:SubstrateHeightMeasureView DataContext="{Binding SubstrateHeightMeasureViewModel}"/>
</TabItem>
</TabControl>
</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.Recipe.View
{
/// <summary>
/// SubstrateRecipeView.xaml 的交互逻辑
/// </summary>
public partial class SubstrateRecipeView : UserControl
{
public SubstrateRecipeView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,19 @@
<UserControl x:Class="MainShell.Recipe.View.SubstrateTeachView"
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.Recipe.View"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="900">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ContentControl Content="{Binding CameraAxisViewModel}" />
<local:MarkTeachView Grid.Column="1" DataContext="{Binding MarkTeachViewModel}"/>
</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.Recipe.View
{
/// <summary>
/// SubstrateTeachView.xaml 的交互逻辑
/// </summary>
public partial class SubstrateTeachView : UserControl
{
public SubstrateTeachView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,76 @@
<UserControl x:Class="MainShell.Recipe.View.WaferRecipeView"
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.Recipe.View" xmlns:mw="http://www.maxwell-gp.com/"
mc:Ignorable="d"
d:DesignHeight="750" d:DesignWidth="800">
<Grid>
<TabControl mw:TabControlAttach.HeaderWidth="Auto"
SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}">
<TabItem Header="{DynamicResource BaseSetting}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="240"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<GroupBox Header="{DynamicResource WaferInfo}" Style="{StaticResource GroupBoxSecondary}">
<GroupBox.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource TextBlockStyle}">
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
</GroupBox.Resources>
<UniformGrid Rows="14" Columns="2">
<TextBlock Text="{DynamicResource DieColor}"/>
<ComboBox IsEditable="True"
Text="{Binding WaferRecipe.WaferInfo.DieColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="{DynamicResource DieSizeX}"/>
<mw:NumberBox Value="{Binding WaferRecipe.WaferInfo.DieSizeX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource DieSizeY}"/>
<mw:NumberBox Value="{Binding WaferRecipe.WaferInfo.DieSizeY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource DiePitchX}"/>
<mw:NumberBox Value="{Binding WaferRecipe.WaferInfo.DiePitchX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource DiePitchY}"/>
<mw:NumberBox Value="{Binding WaferRecipe.WaferInfo.DiePitchY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource WaferWidth}"/>
<mw:NumberBox Value="{Binding WaferRecipe.WaferInfo.WaferWidth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource WaferHeight}"/>
<mw:NumberBox Value="{Binding WaferRecipe.WaferInfo.WaferHeight, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource WaferRowNum}"/>
<mw:NumberBox Value="{Binding WaferRecipe.WaferInfo.WaferRowNum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<TextBlock Text="{DynamicResource WaferColNum}"/>
<mw:NumberBox Value="{Binding WaferRecipe.WaferInfo.WaferColNum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
</UniformGrid>
</GroupBox>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0" Header="工艺参数选择" Style="{StaticResource GroupBoxSecondary}">
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock Text="工艺参数配方: " Style="{StaticResource TextBlockStyle}" VerticalAlignment="Center"/>
<ComboBox MinWidth="160"
ItemsSource="{Binding ProcessRecipes}"
DisplayMemberPath="RecipeName"
SelectedItem="{Binding SelectedProcessRecipeWrap, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</GroupBox>
</Grid>
</Grid>
</TabItem>
<TabItem Header="参数示教">
<local:WaferTeachView DataContext="{Binding WaferTeachViewModel}"/>
</TabItem>
</TabControl>
</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.Recipe.View
{
/// <summary>
/// WaferRecipeView.xaml 的交互逻辑
/// </summary>
public partial class WaferRecipeView : UserControl
{
public WaferRecipeView()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,188 @@
<UserControl x:Class="MainShell.Recipe.View.WaferTeachView"
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:conv="clr-namespace:MainShell.Converter"
xmlns:common="clr-namespace:MainShell.Common"
mc:Ignorable="d"
>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Margin="0,0,8,0">
<ContentControl Content="{Binding CameraAxisViewModel}" />
</Border>
<ScrollViewer Grid.Column="1"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<Grid Margin="4">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Header="模版制作"
Style="{StaticResource ProcessWideCardGroupBoxStyle}">
<StackPanel Orientation="Horizontal"
Margin="0,4,0,0">
<Button Content="视觉参数设置"
Click="{mw:Action OpenVisionParameterSetting}"
Style="{StaticResource VisionButtonStyle}"
mw:View.ActionTarget="{Binding }"
Width="105"
Height="40"
Margin="0,0,10,0"/>
<Button Content="Mark模版"
Click="{mw:Action MakeTemplate}"
mw:View.ActionTarget="{Binding }"
Style="{StaticResource TemplateButtonStyle}"
Width="105"
Height="40"/>
</StackPanel>
</GroupBox>
<Grid Grid.Row="1" DataContext="{Binding WaferRecipe.ScanSettings}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0"
Header="参数示教"
Style="{StaticResource ProcessWideCardGroupBoxStyle}"
Margin="0,0,0,10">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="起始X" Style="{StaticResource ProcessLabelStyle}"/>
<mw:NumberBox Grid.Row="0" Grid.Column="1"
Width="Auto"
MinWidth="120"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding StartPointX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<Label Grid.Row="0" Grid.Column="2" Content="起始Y" Style="{StaticResource ProcessLabelStyle}"/>
<mw:NumberBox Grid.Row="0" Grid.Column="3"
Width="Auto"
MinWidth="120"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding StartPointY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<StackPanel Grid.Row="1"
Grid.ColumnSpan="4"
Margin="0,12,0,0"
HorizontalAlignment="Center"
Orientation="Horizontal">
<Button Content="示教"
Click="{mw:Action TeachStartPoint}"
mw:View.ActionTarget="{Binding DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}"
Style="{StaticResource TeachButtonStyle}"
Margin="0,0,10,0"/>
<Button Content="移动到"
Click="{mw:Action MoveToStartPoint}"
mw:View.ActionTarget="{Binding DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}"
Style="{StaticResource AxisMoveButtonStyle}"
/>
</StackPanel>
</Grid>
</GroupBox>
<GroupBox Grid.Row="1"
Header="扫描参数"
Style="{StaticResource ProcessWideCardGroupBoxStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="X扫描方向" Style="{StaticResource ProcessLabelStyle}"/>
<ComboBox Grid.Row="0" Grid.Column="1"
Width="Auto"
MinWidth="100"
Style="{StaticResource ProcessLargeComboBoxStyle}"
SelectedValue="{Binding ScanDirectionX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Value"
DisplayMemberPath="Description"
ItemsSource="{conv:EnumBindingSourceExtension UseDescription=True, EnumType={x:Type common:TransPathDirection}}"/>
<Label Grid.Row="0" Grid.Column="2" Content="Y扫描方向" Style="{StaticResource ProcessLabelStyle}"/>
<ComboBox Grid.Row="0" Grid.Column="3"
Width="Auto"
MinWidth="100"
Style="{StaticResource ProcessLargeComboBoxStyle}"
SelectedValue="{Binding ScanDirectionY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Value"
DisplayMemberPath="Description"
ItemsSource="{conv:EnumBindingSourceExtension UseDescription=True, EnumType={x:Type common:TransPathDirection}}"/>
<Label Grid.Row="1" Grid.Column="0" Content="X重叠率" Style="{StaticResource ProcessLabelStyle}"/>
<mw:NumberBox Grid.Row="1" Grid.Column="1"
Width="Auto"
MinWidth="100"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding OverlapRateX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<Label Grid.Row="1" Grid.Column="2" Content="Y重叠率" Style="{StaticResource ProcessLabelStyle}"/>
<mw:NumberBox Grid.Row="1" Grid.Column="3"
Width="Auto"
MinWidth="100"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding OverlapRateY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<Label Grid.Row="2" Grid.Column="0" Content="偏移(mm)" Style="{StaticResource ProcessLabelStyle}"/>
<mw:NumberBox Grid.Row="2" Grid.Column="1"
Width="Auto"
MinWidth="100"
Style="{StaticResource ProcessLargeNumberBoxStyle}"
Value="{Binding SoftLimitOffsetMm, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<Label Grid.Row="2" Grid.Column="2" Content="处理数量" Style="{StaticResource ProcessLabelStyle}"/>
<mw:IntNumberBox Grid.Row="2" Grid.Column="3"
Width="Auto"
MinWidth="100"
Style="{StaticResource ProcessLargeIntNumberBoxStyle}"
Value="{Binding ConsumerCount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
<Label Grid.Row="3" Grid.Column="0" Content="处理线程数" Style="{StaticResource ProcessLabelStyle}"/>
<mw:IntNumberBox Grid.Row="3" Grid.Column="1"
Width="Auto"
MinWidth="100"
Style="{StaticResource ProcessLargeIntNumberBoxStyle}"
Value="{Binding FrameChannelCapacity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mw:NumericKeypadAttach.IsEnabled="True"/>
</Grid>
</GroupBox>
</Grid>
</Grid>
</ScrollViewer>
</Grid>
</UserControl>

View File

@@ -0,0 +1,12 @@
using System.Windows.Controls;
namespace MainShell.Recipe.View
{
public partial class WaferTeachView : UserControl
{
public WaferTeachView()
{
InitializeComponent();
}
}
}