Files
XplorePlane/XplorePlane/Views/Main/MainWindow.xaml
T
2026-04-20 11:13:40 +08:00

535 lines
26 KiB
XML

<Window
x:Class="XplorePlane.Views.MainWindow"
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:spreadsheet="clr-namespace:Telerik.Windows.Controls.Spreadsheet;assembly=Telerik.Windows.Controls.Spreadsheet"
xmlns:spreadsheetControls="clr-namespace:Telerik.Windows.Controls.Spreadsheet.Controls;assembly=Telerik.Windows.Controls.Spreadsheet"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:views="clr-namespace:XplorePlane.Views"
xmlns:views1="clr-namespace:XP.Hardware.RaySource.Views;assembly=XP.Hardware.RaySource"
xmlns:mcViews="clr-namespace:XP.Hardware.MotionControl.Views;assembly=XP.Hardware.MotionControl"
x:Name="ParentWindow"
Title="XplorePlane"
Width="1920"
Height="1040"
d:DesignWidth="1580"
Background="#F5F5F5"
Icon="pack://application:,,,/XplorerPlane.ico"
WindowStartupLocation="CenterScreen"
mc:Ignorable="d">
<Window.Resources>
<telerik:IconSources
x:Key="IconPaths"
DarkBasePath="/Telerik.Windows.Controls.Spreadsheet;component/Images/Dark/"
LightBasePath="/Telerik.Windows.Controls.Spreadsheet;component/Images/Light/" />
<spreadsheetControls:BoolToVisibilityValueConverter x:Key="BoolToVisibilityValueConverter" />
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter" />
</Window.Resources>
<Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="28*" />
<ColumnDefinition Width="1157*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="24" />
</Grid.RowDefinitions>
<telerik:RadRibbonView
x:Name="ribbonView"
Title=""
Grid.ColumnSpan="3"
VerticalAlignment="Center"
ApplicationButtonVisibility="Collapsed"
ApplicationName=""
BackstageClippingElement="{Binding ElementName=LayoutRoot}"
FontFamily="Microsoft YaHei UI"
FontSize="11"
HeaderBackground="LightGray"
TextOptions.TextFormattingMode="Display"
TextOptions.TextRenderingMode="ClearType"
TitleBarVisibility="Collapsed">
<telerik:RadRibbonView.Resources>
<spreadsheet:FunctionsProvider x:Key="FunctionsProvider" />
</telerik:RadRibbonView.Resources>
<telerik:RadRibbonTab
Width="53"
HorizontalAlignment="Left"
Header="主页">
<telerik:RadRibbonGroup
telerik:ScreenTip.Title="Clipboard"
Header="文件"
IsEnabled="{Binding Path=ClipboardGroup.IsEnabled}">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<!-- 实时控制: Live / Snap / 加载 / 保存 -->
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="新建CNC"
Command="{Binding Path=SetStyle.Command}"
Size="Medium"
SmallImage="/Assets/Icons/new-doc.png"
Text="新建CNC" />
<telerik:RadRibbonButton
telerik:ScreenTip.Description="保存当前X射线实时图像"
telerik:ScreenTip.Title="保存图像"
Size="Medium"
SmallImage="/Assets/Icons/save.png"
Text="保存" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="另存为"
Command="{Binding OpenFileCommand}"
Size="Medium"
SmallImage="/Assets/Icons/saveas.png"
Text="另存为" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="加载CNC"
Command="{Binding OpenFileCommand}"
Size="Large"
SmallImage="/Assets/Icons/open.png"
Text="加载CNC" />
</StackPanel>
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="程序">
<!-- 安全门控 & 系统 -->
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="运行"
Size="Large"
SmallImage="/Assets/Icons/run.png"
Text="运行" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Description="停止"
telerik:ScreenTip.Title="停止"
Size="Large"
SmallImage="/Assets/Icons/stop.png"
Text="停止" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="开门"
Size="Medium"
SmallImage="/Assets/Icons/opendoor.png"
Text="开门" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="关门"
Size="Medium"
SmallImage="/Assets/Icons/closedoor.png"
Text="关门" />
</StackPanel>
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="快捷工具">
<!-- 快捷工具: 上下两列,带文字 -->
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="中心十字线"
Size="Medium"
SmallImage="/Assets/Icons/crosshair.png"
Text="辅助线" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="白背景检测黑区域"
Size="Medium"
SmallImage="/Assets/Icons/film-darken.png"
Text="白底检测" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="行灰度分布"
Size="Medium"
SmallImage="/Assets/Icons/film-darken.png"
Text="灰度" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="黑背景检测白区域"
Size="Medium"
SmallImage="/Assets/Icons/film-darken.png"
Text="黑底检测" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="锐化"
Size="Medium"
SmallImage="/Assets/Icons/sharpen.png"
Text="锐化" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="增强"
Size="Medium"
SmallImage="/Assets/Icons/dynamic-range.png"
Text="增强" />
</StackPanel>
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup
telerik:ScreenTip.Description="Show the Alignment tab of the Format Cells dialog box."
telerik:ScreenTip.Title="Format Cells: Alignment"
DialogLauncherCommand="{Binding Path=ShowFormatCellsDialog.Command}"
DialogLauncherCommandParameter="Alignment"
DialogLauncherVisibility="{Binding Path=ShowFormatCellsDialog.IsEnabled, Converter={StaticResource BoolToVisibilityValueConverter}}"
Header="硬件"
IsEnabled="{Binding Path=AlignmentGroup.IsEnabled}">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonGroup.Resources>
<spreadsheetControls:RadHorizontalAlignmentToBooleanConverter x:Key="horizontalAlignmentToBooleanConverter" />
<spreadsheetControls:RadVerticalAlignmentToBooleanConverter x:Key="verticalAlignmentToBooleanConverter" />
</telerik:RadRibbonGroup.Resources>
<!-- 第一列: 暖机 + 轴复位 上下排列 -->
<StackPanel>
<telerik:RadRibbonToggleButton
telerik:ScreenTip.Description="暖机"
telerik:ScreenTip.Title="暖机"
Command="{Binding WarmUpCommand}"
Size="Medium"
SmallImage="/Assets/Icons/heat-engine.png"
Text="暖机" />
<telerik:RadRibbonToggleButton
x:Name="MergeAndCenterButton"
telerik:ScreenTip.Description="轴复位"
telerik:ScreenTip.Title="轴复位"
Command="{Binding AxisResetCommand}"
Size="Medium"
SmallImage="/Assets/Icons/home.png"
Text="轴复位" />
</StackPanel>
<!-- 第二列: 射线源 + 探测器 + 运动控制 -->
<StackPanel>
<telerik:RadRibbonToggleButton
x:Name="MergeAndCenterButton1"
telerik:ScreenTip.Description="射线源控制"
telerik:ScreenTip.Title="射线源"
Command="{Binding OpenRaySourceConfigCommand}"
Size="Medium"
SmallImage="/Assets/Icons/xray.png"
Text="射线源" />
<telerik:RadRibbonToggleButton
x:Name="MergeAndCenterButton2"
telerik:ScreenTip.Description="探测器控制"
telerik:ScreenTip.Title="探测器"
Command="{Binding OpenDetectorConfigCommand}"
Size="Medium"
SmallImage="/Assets/Icons/detector2.png"
Text="探测器" />
<telerik:RadRibbonToggleButton
x:Name="MergeAndCenterButton3"
telerik:ScreenTip.Description="运动控制"
telerik:ScreenTip.Title="运动控制"
Command="{Binding OpenMotionDebugCommand}"
Size="Medium"
SmallImage="/Assets/Icons/xyz.png"
Text="运动控制" />
</StackPanel>
<!-- 第三列: 相机设置 / PLC 地址配置 -->
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Description="打开相机参数设置对话框"
telerik:ScreenTip.Title="相机设置"
Command="{Binding OpenCameraSettingsCommand}"
Size="Medium"
SmallImage="/Assets/Icons/detector2.png"
Text="相机设置" />
<telerik:RadRibbonButton
telerik:ScreenTip.Description="打开 PLC 信号地址定义编辑器"
telerik:ScreenTip.Title="PLC 地址配置"
Command="{Binding OpenPlcAddrConfigCommand}"
Size="Medium"
SmallImage="/Assets/Icons/tools.png"
Text="PLC 地址" />
</StackPanel>
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup telerik:ScreenTip.Title="图像算子" Header="图像算子">
<telerik:RadRibbonButton
telerik:ScreenTip.Description="打开算子工具箱,拖拽算子到流水线中"
telerik:ScreenTip.Title="算子工具箱"
Command="{Binding OpenToolboxCommand}"
Size="Large"
SmallImage="/Assets/Icons/dynamic-range.png"
Text="算子工具箱" />
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="CNC">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<!-- CNC 编辑器入口按钮 -->
<telerik:RadRibbonButton
telerik:ScreenTip.Description="打开 CNC 编辑器窗口,创建和编辑检测配方程序"
telerik:ScreenTip.Title="CNC 编辑器"
Command="{Binding OpenCncEditorCommand}"
Size="Large"
SmallImage="/Assets/Icons/cnc.png"
Text="CNC 编辑器" />
<!-- 矩阵编排入口按钮 -->
<telerik:RadRibbonButton
telerik:ScreenTip.Description="打开矩阵编排窗口,配置多工件阵列检测方案"
telerik:ScreenTip.Title="矩阵编排"
Command="{Binding OpenMatrixEditorCommand}"
Size="Large"
SmallImage="/Assets/Icons/matrix.png"
Text="矩阵编排" />
<!-- CNC 节点快捷工具 -->
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="参考点"
Size="Medium"
SmallImage="/Assets/Icons/reference.png"
Text="参考点" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="添加位置"
Size="Medium"
SmallImage="/Assets/Icons/add-pos.png"
Text="添加位置" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="完成"
Size="Medium"
SmallImage="/Assets/Icons/finish.png"
Text="完成" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="标记"
Size="Medium"
SmallImage="/Assets/Icons/mark.png"
Text="标记" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="模块"
Size="Medium"
SmallImage="/Assets/Icons/Module.png"
Text="检测模块" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="全部保存"
Size="Medium"
SmallImage="/Assets/Icons/saveall.png"
Text="全部保存" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="消息"
Size="Medium"
SmallImage="/Assets/Icons/message.png"
Text="消息弹窗" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="等待"
Size="Medium"
SmallImage="/Assets/Icons/wait.png"
Text="插入等待" />
</StackPanel>
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="高级模块" IsEnabled="{Binding Path=CellsGroup.IsEnabled}">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonButton
telerik:ScreenTip.Description="Create a link in your document for quick access to webpages and files.&#13;&#13;Hyperlinks can also take you to places in your document."
telerik:ScreenTip.Title="Add a Hyperlink"
Command="{Binding Path=ShowHyperlinkDialog.Command}"
Content="BGA检测"
IsEnabled="{Binding Path=ShowHyperlinkDialog.IsEnabled}"
Size="Large"
SmallImage="/Assets/Icons/bga.png" />
<telerik:RadRibbonButton
telerik:ScreenTip.Description="Create a link in your document for quick access to webpages and files.&#13;&#13;Hyperlinks can also take you to places in your document."
telerik:ScreenTip.Title="Add a Hyperlink"
Command="{Binding Path=ShowHyperlinkDialog.Command}"
Content="孔隙检测"
IsEnabled="{Binding Path=ShowHyperlinkDialog.IsEnabled}"
Size="Large"
SmallImage="/Assets/Icons/Pores.png" />
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="扫描模式" IsEnabled="{Binding Path=LinksGroup.IsEnabled}">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonButton
telerik:ScreenTip.Description="Create a link in your document for quick access to webpages and files.&#13;&#13;Hyperlinks can also take you to places in your document."
telerik:ScreenTip.Title="Add a Hyperlink"
Command="{Binding Path=ShowHyperlinkDialog.Command}"
Content="快速扫描"
IsEnabled="{Binding Path=ShowHyperlinkDialog.IsEnabled}"
Size="Large"
SmallImage="/Assets/Icons/quick-scan.png" />
<telerik:RadRibbonButton
telerik:ScreenTip.Description="Create a link in your document for quick access to webpages and files.&#13;&#13;Hyperlinks can also take you to places in your document."
telerik:ScreenTip.Title="Add a Hyperlink"
Command="{Binding Path=ShowHyperlinkDialog.Command}"
Content="螺旋扫描"
IsEnabled="{Binding Path=ShowHyperlinkDialog.IsEnabled}"
Size="Large"
SmallImage="/Assets/Icons/spiral.png" />
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="图像处理">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonButton
Command="{Binding OpenPipelineEditorCommand}"
Size="Large"
SmallImage="/Assets/Icons/workflow.png"
Text="流水线编辑器" />
</telerik:RadRibbonGroup>
</telerik:RadRibbonTab>
<telerik:RadRibbonTab Header="关于">
<telerik:RadRibbonGroup Header="关于">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonButton
Size="Large"
SmallImage="/Assets/Icons/tools.png"
Command="{Binding OpenLibraryVersionsCommand}"
Text="关于 XplorePlane" />
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="帮助">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonButton
Size="Large"
SmallImage="/Assets/Icons/message.png"
Command="{Binding OpenUserManualCommand}"
Text="帮助文档" />
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="设置">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonButton
telerik:ScreenTip.Description="切换应用程序显示语言"
telerik:ScreenTip.Title="多语言设置"
Size="Large"
SmallImage="/Assets/Icons/tools.png"
Command="{Binding OpenLanguageSwitcherCommand}"
Text="多语言设置" />
<telerik:RadRibbonButton
telerik:ScreenTip.Description="打开实时日志查看器"
telerik:ScreenTip.Title="查看日志"
Size="Large"
SmallImage="/Assets/Icons/message.png"
Command="{Binding OpenRealTimeLogViewerCommand}"
Text="查看日志" />
</telerik:RadRibbonGroup>
</telerik:RadRibbonTab>
<telerik:RadRibbonView.ContextualGroups>
<telerik:RadRibbonContextualGroup
x:Name="PictureTools"
Header="Picture Tools"
IsActive="{Binding Path=PictureToolsTab.IsEnabled, Mode=OneWay}" />
</telerik:RadRibbonView.ContextualGroups>
</telerik:RadRibbonView>
<!-- Row 1: 主内容区 - 比例布局 -->
<Grid
Grid.Row="1"
Grid.ColumnSpan="3"
Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="NavColumn" Width="0" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="350" />
<ColumnDefinition Width="350" />
</Grid.ColumnDefinitions>
<!-- 左侧: 计划导航 (默认隐藏,点击CNC AccountingNumberFormatButton显示) -->
<views:NavigationPanelView
x:Name="NavigationPanel"
Grid.Column="0"
Visibility="Collapsed" />
<!-- 中间: 2D Viewport -->
<Border
Grid.Column="1"
BorderBrush="#DDDDDD"
BorderThickness="1,0,1,0">
<views:ViewportPanelView />
</Border>
<!-- 中间: 图像 -->
<Border
Grid.Column="2"
BorderBrush="#DDDDDD"
BorderThickness="0,0,1,0">
<views:ImagePanelView />
</Border>
<!-- 右侧: 属性面板 -->
<Grid Grid.Column="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<views1:RaySourceOperateView Grid.Row="0" Grid.ColumnSpan="2" />
<mcViews:MotionControlView Grid.Row="1" Grid.ColumnSpan="2"/>
<views:NavigationPropertyPanelView Grid.Row="2" Grid.ColumnSpan="2" />
</Grid>
</Grid>
<!-- Row 2: 状态栏 -->
<Border
Grid.Row="2"
Grid.ColumnSpan="3"
Background="#0060A0"
BorderBrush="#004880"
BorderThickness="0,1,0,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- 左侧: 状态信息 -->
<TextBlock
Grid.Column="0"
Margin="8,0"
VerticalAlignment="Center"
FontFamily="Microsoft YaHei UI"
FontSize="11"
Foreground="White"
Text="就绪" />
<!-- 右侧: 鼠标坐标 + RGB -->
<TextBlock
Grid.Column="1"
Margin="8,0"
VerticalAlignment="Center"
FontFamily="Consolas"
FontSize="11"
Foreground="White"
Text="x: 0 y: 0 RGB: 0 0 0" />
</Grid>
</Border>
</Grid>
</Window>