#0042 界面优化布局,包括icon的设计

This commit is contained in:
zhengxuan.zhang
2026-03-20 14:26:01 +08:00
parent 2bd21f9eb4
commit 2c8d9df19c
4 changed files with 295 additions and 211 deletions
@@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using Prism.Mvvm; using Prism.Mvvm;
@@ -12,31 +13,58 @@ namespace XplorePlane.ViewModels
public string DisplayName { get; } public string DisplayName { get; }
public string IconPath { get; } public string IconPath { get; }
public string Category { get; } public string Category { get; }
public string CategoryIcon { get; }
public OperatorDescriptor(string key, string displayName, string iconPath = "", string category = "通用") public OperatorDescriptor(string key, string displayName, string iconPath = "", string category = "通用", string categoryIcon = "⚙")
{ {
Key = key; Key = key;
DisplayName = displayName; DisplayName = displayName;
IconPath = iconPath; IconPath = iconPath;
Category = category; Category = category;
CategoryIcon = categoryIcon;
} }
} }
public class OperatorGroupViewModel
{
public string CategoryName { get; set; }
public string CategoryIcon { get; set; }
public ObservableCollection<OperatorDescriptor> Operators { get; set; } = new();
}
public class OperatorToolboxViewModel : BindableBase public class OperatorToolboxViewModel : BindableBase
{ {
private readonly IImageProcessingService _imageProcessingService; private readonly IImageProcessingService _imageProcessingService;
private string _searchText = string.Empty; private string _searchText = string.Empty;
// 算子 Key -> (分类名, 分类图标, 算子图标) 映射
private static readonly Dictionary<string, (string Category, string CatIcon, string OpIcon)> CategoryMap = new()
{
["GaussianBlur"] = ("滤波与平滑", "🔵", "🌀"),
["GaussianBlur16"] = ("滤波与平滑", "🔵", "🌀"),
["BandPassFilter"] = ("滤波与平滑", "🔵", "📶"),
["ShockFilter"] = ("滤波与平滑", "🔵", "⚡"),
["Contrast"] = ("增强与校正", "🟡", "🔆"),
["Gamma"] = ("增强与校正", "🟡", "🌗"),
["FlatFieldCorrection16"] = ("增强与校正", "🟡", "📐"),
["Threshold"] = ("分割与阈值", "🟢", "📊"),
["Division"] = ("分割与阈值", "🟢", "➗"),
["Morphology"] = ("形态学与轮廓", "🔴", "🔲"),
["Contour"] = ("形态学与轮廓", "🔴", "✏️"),
};
public OperatorToolboxViewModel(IImageProcessingService imageProcessingService) public OperatorToolboxViewModel(IImageProcessingService imageProcessingService)
{ {
_imageProcessingService = imageProcessingService ?? throw new ArgumentNullException(nameof(imageProcessingService)); _imageProcessingService = imageProcessingService ?? throw new ArgumentNullException(nameof(imageProcessingService));
AvailableOperators = new ObservableCollection<OperatorDescriptor>(); AvailableOperators = new ObservableCollection<OperatorDescriptor>();
FilteredOperators = new ObservableCollection<OperatorDescriptor>(); FilteredOperators = new ObservableCollection<OperatorDescriptor>();
FilteredGroups = new ObservableCollection<OperatorGroupViewModel>();
LoadOperators(); LoadOperators();
} }
public ObservableCollection<OperatorDescriptor> AvailableOperators { get; } public ObservableCollection<OperatorDescriptor> AvailableOperators { get; }
public ObservableCollection<OperatorDescriptor> FilteredOperators { get; } public ObservableCollection<OperatorDescriptor> FilteredOperators { get; }
public ObservableCollection<OperatorGroupViewModel> FilteredGroups { get; }
public string SearchText public string SearchText
{ {
@@ -54,7 +82,10 @@ namespace XplorePlane.ViewModels
foreach (var key in _imageProcessingService.GetAvailableProcessors()) foreach (var key in _imageProcessingService.GetAvailableProcessors())
{ {
var displayName = _imageProcessingService.GetProcessorDisplayName(key); var displayName = _imageProcessingService.GetProcessorDisplayName(key);
AvailableOperators.Add(new OperatorDescriptor(key, displayName ?? key)); var (category, catIcon, opIcon) = CategoryMap.TryGetValue(key, out var info)
? info
: ("其他", "⚙", "⚙");
AvailableOperators.Add(new OperatorDescriptor(key, displayName ?? key, opIcon, category, catIcon));
} }
ApplyFilter(); ApplyFilter();
} }
@@ -62,12 +93,39 @@ namespace XplorePlane.ViewModels
private void ApplyFilter() private void ApplyFilter()
{ {
FilteredOperators.Clear(); FilteredOperators.Clear();
FilteredGroups.Clear();
var filtered = string.IsNullOrWhiteSpace(SearchText) var filtered = string.IsNullOrWhiteSpace(SearchText)
? AvailableOperators ? AvailableOperators
: AvailableOperators.Where(o => : AvailableOperators.Where(o =>
o.DisplayName.Contains(SearchText, StringComparison.OrdinalIgnoreCase)); o.DisplayName.Contains(SearchText, StringComparison.OrdinalIgnoreCase) ||
o.Category.Contains(SearchText, StringComparison.OrdinalIgnoreCase));
foreach (var op in filtered) foreach (var op in filtered)
FilteredOperators.Add(op); FilteredOperators.Add(op);
var groups = filtered
.GroupBy(o => o.Category)
.OrderBy(g => GetCategoryOrder(g.Key));
foreach (var group in groups)
{
FilteredGroups.Add(new OperatorGroupViewModel
{
CategoryName = group.Key,
CategoryIcon = group.First().CategoryIcon,
Operators = new ObservableCollection<OperatorDescriptor>(group)
});
}
} }
private static int GetCategoryOrder(string category) => category switch
{
"滤波与平滑" => 0,
"增强与校正" => 1,
"分割与阈值" => 2,
"形态学与轮廓" => 3,
_ => 99
};
} }
} }
@@ -7,11 +7,13 @@
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
prism:ViewModelLocator.AutoWireViewModel="True" prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="200"> d:DesignHeight="600" d:DesignWidth="280">
<UserControl.Resources> <UserControl.Resources>
<SolidColorBrush x:Key="PanelBg" Color="White"/> <SolidColorBrush x:Key="PanelBg" Color="White"/>
<SolidColorBrush x:Key="PanelBorder" Color="#cdcbcb"/> <SolidColorBrush x:Key="PanelBorder" Color="#cdcbcb"/>
<SolidColorBrush x:Key="CategoryBg" Color="#F5F7FA"/>
<SolidColorBrush x:Key="HoverBg" Color="#E8F0FE"/>
<FontFamily x:Key="CsdFont">Microsoft YaHei UI</FontFamily> <FontFamily x:Key="CsdFont">Microsoft YaHei UI</FontFamily>
</UserControl.Resources> </UserControl.Resources>
@@ -26,18 +28,18 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- 标题 --> <!-- 标题 -->
<Border Grid.Row="0" Background="#F0F0F0" BorderBrush="{StaticResource PanelBorder}" <Border Grid.Row="0" Background="#0060A0" Padding="10,8">
BorderThickness="0,0,0,1" Padding="8,6"> <TextBlock Text="🧰 算子工具箱" FontFamily="{StaticResource CsdFont}"
<TextBlock Text="算子工具箱" FontFamily="{StaticResource CsdFont}" FontWeight="Bold" FontSize="13" Foreground="White"/>
FontWeight="Bold" FontSize="12" Foreground="#1c1c1b"/>
</Border> </Border>
<!-- 搜索框 --> <!-- 搜索框 -->
<Border Grid.Row="1" Padding="6,4" BorderBrush="{StaticResource PanelBorder}" <Border Grid.Row="1" Padding="8,6" BorderBrush="{StaticResource PanelBorder}"
BorderThickness="0,0,0,1"> BorderThickness="0,0,0,1">
<TextBox Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" <TextBox Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}"
FontFamily="{StaticResource CsdFont}" FontSize="11" FontFamily="{StaticResource CsdFont}" FontSize="11"
Padding="4,2" BorderBrush="#cdcbcb" BorderThickness="1"> Padding="6,4" BorderBrush="#cdcbcb" BorderThickness="1"
ToolTip="输入关键字搜索算子">
<TextBox.Style> <TextBox.Style>
<Style TargetType="TextBox"> <Style TargetType="TextBox">
<Style.Triggers> <Style.Triggers>
@@ -46,7 +48,7 @@
<Setter.Value> <Setter.Value>
<VisualBrush AlignmentX="Left" AlignmentY="Center" Stretch="None"> <VisualBrush AlignmentX="Left" AlignmentY="Center" Stretch="None">
<VisualBrush.Visual> <VisualBrush.Visual>
<TextBlock Text="搜索算子..." Foreground="#aaa" <TextBlock Text="🔍 搜索算子..." Foreground="#aaa"
FontFamily="Microsoft YaHei UI" FontSize="11" FontFamily="Microsoft YaHei UI" FontSize="11"
Margin="4,0,0,0"/> Margin="4,0,0,0"/>
</VisualBrush.Visual> </VisualBrush.Visual>
@@ -60,27 +62,72 @@
</TextBox> </TextBox>
</Border> </Border>
<!-- 算子列表(拖拽源) --> <!-- 分组算子列表 -->
<telerik:RadListBox Grid.Row="2" <ScrollViewer x:Name="ToolboxListBox" Grid.Row="2" VerticalScrollBarVisibility="Auto">
x:Name="ToolboxListBox" <ItemsControl ItemsSource="{Binding FilteredGroups}">
ItemsSource="{Binding FilteredOperators}" <ItemsControl.ItemTemplate>
BorderThickness="0" <DataTemplate>
Background="Transparent"> <StackPanel Margin="0,0,0,2">
<telerik:RadListBox.ItemTemplate> <!-- 分类标题 -->
<DataTemplate> <Border Background="{StaticResource CategoryBg}"
<StackPanel Orientation="Horizontal" Margin="4,3"> BorderBrush="{StaticResource PanelBorder}"
<Border Width="24" Height="24" Background="#E8F0FE" BorderThickness="0,0,0,1"
CornerRadius="3" Margin="0,0,6,0"> Padding="10,6">
<TextBlock Text="⚙" HorizontalAlignment="Center" <StackPanel Orientation="Horizontal">
VerticalAlignment="Center" FontSize="12"/> <TextBlock Text="{Binding CategoryIcon}" FontSize="13"
</Border> VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock Text="{Binding DisplayName}" <TextBlock Text="{Binding CategoryName}"
FontFamily="Microsoft YaHei UI" FontSize="11" FontFamily="Microsoft YaHei UI"
VerticalAlignment="Center"/> FontWeight="SemiBold" FontSize="12"
</StackPanel> Foreground="#333" VerticalAlignment="Center"/>
</DataTemplate> </StackPanel>
</telerik:RadListBox.ItemTemplate> </Border>
</telerik:RadListBox> <!-- 分类下的算子 -->
<ItemsControl ItemsSource="{Binding Operators}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Padding="12,5,8,5" Cursor="Hand"
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0,0,0,1">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#E8F0FE"/>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Orientation="Horizontal">
<Border Width="26" Height="26"
Background="#EEF2FF"
CornerRadius="4" Margin="0,0,8,0">
<TextBlock Text="{Binding IconPath}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="14"/>
</Border>
<StackPanel VerticalAlignment="Center">
<TextBlock Text="{Binding DisplayName}"
FontFamily="Microsoft YaHei UI"
FontSize="11.5"
Foreground="#1c1c1b"/>
<TextBlock Text="{Binding Key}"
FontFamily="Consolas"
FontSize="9.5"
Foreground="#999"/>
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid> </Grid>
</Border> </Border>
</UserControl> </UserControl>
+157 -178
View File
@@ -10,10 +10,11 @@
xmlns:views="clr-namespace:XplorePlane.Views" xmlns:views="clr-namespace:XplorePlane.Views"
x:Name="ParentWindow" x:Name="ParentWindow"
Title="XplorePlane" Title="XplorePlane"
Width="1280" Width="1920"
Height="1000" Height="1040"
d:DesignWidth="1280" d:DesignWidth="1580"
Background="#F5F5F5" Background="#F5F5F5"
Icon="pack://application:,,,/GapInspect.ico"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<Window.Resources> <Window.Resources>
@@ -28,7 +29,6 @@
<Grid x:Name="LayoutRoot"> <Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="28*" /> <ColumnDefinition Width="28*" />
<ColumnDefinition Width="1157*" /> <ColumnDefinition Width="1157*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <Grid.RowDefinitions>
@@ -39,11 +39,11 @@
<telerik:RadRibbonView <telerik:RadRibbonView
x:Name="ribbonView" x:Name="ribbonView"
Title="XplorePlane" Title=""
Grid.ColumnSpan="3" Grid.ColumnSpan="3"
VerticalAlignment="Center" VerticalAlignment="Center"
ApplicationButtonVisibility="Collapsed" ApplicationButtonVisibility="Collapsed"
ApplicationName="" ApplicationName="XplorePlane"
BackstageClippingElement="{Binding ElementName=LayoutRoot}" BackstageClippingElement="{Binding ElementName=LayoutRoot}"
HeaderBackground="LightGray"> HeaderBackground="LightGray">
@@ -51,7 +51,10 @@
<spreadsheet:FunctionsProvider x:Key="FunctionsProvider" /> <spreadsheet:FunctionsProvider x:Key="FunctionsProvider" />
</telerik:RadRibbonView.Resources> </telerik:RadRibbonView.Resources>
<telerik:RadRibbonTab Header="主页"> <telerik:RadRibbonTab
Width="53"
HorizontalAlignment="Left"
Header="主页">
<telerik:RadRibbonGroup <telerik:RadRibbonGroup
telerik:ScreenTip.Title="Clipboard" telerik:ScreenTip.Title="Clipboard"
Header="文件" Header="文件"
@@ -61,27 +64,28 @@
</telerik:RadRibbonGroup.Variants> </telerik:RadRibbonGroup.Variants>
<!-- 实时控制: Live / Snap / 加载 / 保存 --> <!-- 实时控制: Live / Snap / 加载 / 保存 -->
<telerik:RadRibbonButton
telerik:ScreenTip.Description="激活X射线实时模式"
telerik:ScreenTip.Title="实时模式"
Size="Large"
Text="实时" />
<StackPanel> <StackPanel>
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Title="加载图像" telerik:ScreenTip.Title="加载CNC"
Command="{Binding OpenFileCommand}" Command="{Binding OpenFileCommand}"
Size="Medium" Size="Medium"
Text="📂 加载" /> Text="📂 加载CNC" />
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Description="保存当前X射线实时图像" telerik:ScreenTip.Description="保存当前X射线实时图像"
telerik:ScreenTip.Title="保存图像" telerik:ScreenTip.Title="保存图像"
Size="Medium" Size="Medium"
Text="💾 保存" /> Text="💾 保存" />
</StackPanel> </StackPanel>
<StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="另存为"
Command="{Binding OpenFileCommand}"
Size="Medium"
Text="📂 另存为" />
</StackPanel>
</telerik:RadRibbonGroup> </telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Width="180" Header="程序"> <telerik:RadRibbonGroup Width="160" Header="程序">
<!-- 安全门控 & 系统 --> <!-- 安全门控 & 系统 -->
@@ -95,8 +99,6 @@
</StackPanel> </StackPanel>
<StackPanel> <StackPanel>
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Description="停止" telerik:ScreenTip.Description="停止"
telerik:ScreenTip.Title="停止" telerik:ScreenTip.Title="停止"
@@ -116,60 +118,46 @@
SmallImage="/Assets/Icons/closedoor.png" SmallImage="/Assets/Icons/closedoor.png"
Text="关门" /> Text="关门" />
</StackPanel> </StackPanel>
</telerik:RadRibbonGroup> </telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Width="130" Header="快捷工具"> <telerik:RadRibbonGroup Header="快捷工具">
<!-- 快捷工具: 上下两列,带文字 -->
<!-- 快捷工具 (Small按钮组) --> <StackPanel>
<telerik:RadButtonGroup>
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Title="中心十字线" telerik:ScreenTip.Title="中心十字线"
Size="Small" Size="Medium"
SmallImage="/Assets/Icons/crosshair.png" SmallImage="/Assets/Icons/crosshair.png"
Text="中心十字线" /> Text="十字线" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="白背景检测黑区域"
Size="Medium"
SmallImage="/Assets/Icons/film-darken.png"
Text="白底检测" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Title="行灰度分布" telerik:ScreenTip.Title="行灰度分布"
Size="Small" Size="Medium"
SmallImage="/Assets/Icons/film-darken.png" SmallImage="/Assets/Icons/film-darken.png"
Text="灰度" /> Text="灰度" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="黑背景检测白区域"
Size="Medium"
SmallImage="/Assets/Icons/film-darken.png"
Text="黑底检测" />
</StackPanel>
<StackPanel>
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Title="锐化" telerik:ScreenTip.Title="锐化"
Size="Small" Size="Medium"
SmallImage="/Assets/Icons/sharpen.png" SmallImage="/Assets/Icons/sharpen.png"
Text="锐化" /> Text="锐化" />
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Title="增强" telerik:ScreenTip.Title="增强"
Size="Small" Size="Medium"
SmallImage="/Assets/Icons/dynamic-range.png" SmallImage="/Assets/Icons/dynamic-range.png"
Text="增强" /> Text="增强" />
</telerik:RadButtonGroup> </StackPanel>
<telerik:RadButtonGroup>
<telerik:RadRibbonButton
telerik:ScreenTip.Title="白背景检测黑区域"
Size="Small"
SmallImage="/Assets/Icons/film-darken.png"
Text="◻" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="黑背景检测白区域"
Size="Small"
SmallImage="/Assets/Icons/film-darken.png"
Text="◼" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="缩小"
Size="Small"
SmallImage="/Assets/Icons/film-darken.png"
Text="Out" />
<telerik:RadRibbonButton
telerik:ScreenTip.Title="放大"
Size="Small"
SmallImage="/Assets/Icons/film-darken.png"
Text="In" />
</telerik:RadButtonGroup>
</telerik:RadRibbonGroup> </telerik:RadRibbonGroup>
<telerik:RadRibbonGroup <telerik:RadRibbonGroup
@@ -188,15 +176,11 @@
<spreadsheetControls:RadVerticalAlignmentToBooleanConverter x:Key="verticalAlignmentToBooleanConverter" /> <spreadsheetControls:RadVerticalAlignmentToBooleanConverter x:Key="verticalAlignmentToBooleanConverter" />
</telerik:RadRibbonGroup.Resources> </telerik:RadRibbonGroup.Resources>
<telerik:RadOrderedWrapPanel /> <!-- 第一列: 暖机 + 轴复位 上下排列 -->
<StackPanel>
<telerik:RadOrderedWrapPanel>
<telerik:RadOrderedWrapPanel.Resources>
<telerik:InvertedBooleanConverter x:Key="InvertedBooleanConverter" />
</telerik:RadOrderedWrapPanel.Resources>
<telerik:RadRibbonToggleButton <telerik:RadRibbonToggleButton
telerik:ScreenTip.Description="Make all content visible within a cell by displaying it on multiple lines." telerik:ScreenTip.Description="暖机"
telerik:ScreenTip.Title="Wrap Text" telerik:ScreenTip.Title="暖机"
Command="{Binding Path=SetIsWrapped.Command}" Command="{Binding Path=SetIsWrapped.Command}"
CommandParameter="{Binding Path=SetIsWrapped.SelectedValue}" CommandParameter="{Binding Path=SetIsWrapped.SelectedValue}"
IsChecked="{Binding Path=SetIsWrapped.SelectedValue, Mode=TwoWay}" IsChecked="{Binding Path=SetIsWrapped.SelectedValue, Mode=TwoWay}"
@@ -204,24 +188,27 @@
Size="Medium" Size="Medium"
SmallImage="/Assets/Icons/heat-engine.png" SmallImage="/Assets/Icons/heat-engine.png"
Text="暖机" /> Text="暖机" />
<telerik:RadRibbonToggleButton <telerik:RadRibbonToggleButton
x:Name="MergeAndCenterButton" x:Name="MergeAndCenterButton"
telerik:ScreenTip.Description="Joins the selected cells into one larger cell and centers the contents in the new cell.&#10; This is often used to create labels that span multiple columns." telerik:ScreenTip.Description="轴复位"
telerik:ScreenTip.Title="Merge &amp; Center" telerik:ScreenTip.Title="轴复位"
Command="{Binding Path=MergeAndCenter.Command}" Command="{Binding Path=MergeAndCenter.Command}"
CommandParameter="{Binding Path=MergeAndCenter.SelectedValue, Converter={StaticResource InvertedBooleanConverter}}" CommandParameter="{Binding Path=MergeAndCenter.SelectedValue}"
IsChecked="{Binding Path=MergeAndCenter.SelectedValue, Mode=TwoWay}" IsChecked="{Binding Path=MergeAndCenter.SelectedValue, Mode=TwoWay}"
IsEnabled="{Binding Path=MergeAndCenter.IsEnabled}" IsEnabled="{Binding Path=MergeAndCenter.IsEnabled}"
Size="Medium" Size="Medium"
SmallImage="/Assets/Icons/home.png" SmallImage="/Assets/Icons/home.png"
Text="轴复位" /> Text="轴复位" />
</StackPanel>
<!-- 第二列: 射线源 + 探测器 + 运动控制 -->
<StackPanel>
<telerik:RadRibbonToggleButton <telerik:RadRibbonToggleButton
x:Name="MergeAndCenterButton1" x:Name="MergeAndCenterButton1"
telerik:ScreenTip.Description="Joins the selected cells into one larger cell and centers the contents in the new cell.&#10; This is often used to create labels that span multiple columns." telerik:ScreenTip.Description="射线源控制"
telerik:ScreenTip.Title="Merge &amp; Center" telerik:ScreenTip.Title="射线源"
Command="{Binding Path=MergeAndCenter.Command}" Command="{Binding Path=MergeAndCenter.Command}"
CommandParameter="{Binding Path=MergeAndCenter.SelectedValue, Converter={StaticResource InvertedBooleanConverter}}" CommandParameter="{Binding Path=MergeAndCenter.SelectedValue}"
IsChecked="{Binding Path=MergeAndCenter.SelectedValue, Mode=TwoWay}" IsChecked="{Binding Path=MergeAndCenter.SelectedValue, Mode=TwoWay}"
IsEnabled="{Binding Path=MergeAndCenter.IsEnabled}" IsEnabled="{Binding Path=MergeAndCenter.IsEnabled}"
Size="Medium" Size="Medium"
@@ -229,136 +216,114 @@
Text="射线源" /> Text="射线源" />
<telerik:RadRibbonToggleButton <telerik:RadRibbonToggleButton
x:Name="MergeAndCenterButton2" x:Name="MergeAndCenterButton2"
telerik:ScreenTip.Description="Joins the selected cells into one larger cell and centers the contents in the new cell.&#10; This is often used to create labels that span multiple columns." telerik:ScreenTip.Description="探测器控制"
telerik:ScreenTip.Title="Merge &amp; Center" telerik:ScreenTip.Title="探测器"
Command="{Binding Path=MergeAndCenter.Command}" Command="{Binding Path=MergeAndCenter.Command}"
CommandParameter="{Binding Path=MergeAndCenter.SelectedValue, Converter={StaticResource InvertedBooleanConverter}}" CommandParameter="{Binding Path=MergeAndCenter.SelectedValue}"
IsChecked="{Binding Path=MergeAndCenter.SelectedValue, Mode=TwoWay}" IsChecked="{Binding Path=MergeAndCenter.SelectedValue, Mode=TwoWay}"
IsEnabled="{Binding Path=MergeAndCenter.IsEnabled}" IsEnabled="{Binding Path=MergeAndCenter.IsEnabled}"
Size="Medium" Size="Medium"
SmallImage="/Assets/Icons/detector.png" SmallImage="/Assets/Icons/detector2.png"
Text="探测器" /> Text="探测器" />
<telerik:RadRibbonToggleButton <telerik:RadRibbonToggleButton
x:Name="MergeAndCenterButton3" x:Name="MergeAndCenterButton3"
telerik:ScreenTip.Description="Joins the selected cells into one larger cell and centers the contents in the new cell.&#10; This is often used to create labels that span multiple columns." telerik:ScreenTip.Description="运动控制"
telerik:ScreenTip.Title="Merge &amp; Center" telerik:ScreenTip.Title="运动控制"
Command="{Binding Path=MergeAndCenter.Command}" Command="{Binding Path=MergeAndCenter.Command}"
CommandParameter="{Binding Path=MergeAndCenter.SelectedValue, Converter={StaticResource InvertedBooleanConverter}}" CommandParameter="{Binding Path=MergeAndCenter.SelectedValue}"
IsChecked="{Binding Path=MergeAndCenter.SelectedValue, Mode=TwoWay}" IsChecked="{Binding Path=MergeAndCenter.SelectedValue, Mode=TwoWay}"
IsEnabled="{Binding Path=MergeAndCenter.IsEnabled}" IsEnabled="{Binding Path=MergeAndCenter.IsEnabled}"
Size="Medium" Size="Medium"
SmallImage="/Assets/Icons/xyz.png" SmallImage="/Assets/Icons/xyz.png"
Text="运动控制" /> Text="运动控制" />
</telerik:RadOrderedWrapPanel> </StackPanel>
</telerik:RadRibbonGroup> </telerik:RadRibbonGroup>
<telerik:RadRibbonGroup telerik:ScreenTip.Title="图像算子" Header="图像算子"> <telerik:RadRibbonGroup telerik:ScreenTip.Title="图像算子" Header="图像算子">
<telerik:RadRibbonDropDownButton <telerik:RadRibbonDropDownButton
telerik:ScreenTip.Description="打开算子工具箱,拖拽算子到流水线中" telerik:ScreenTip.Description="打开算子工具箱,拖拽算子到流水线中"
telerik:ScreenTip.Title="算子工具箱" telerik:ScreenTip.Title="算子工具箱"
LargeImage="/Assets/Icons/dynamic-range.png"
Size="Large" Size="Large"
Text="算子工具箱"> Text="算子工具箱">
<telerik:RadRibbonDropDownButton.DropDownContent> <telerik:RadRibbonDropDownButton.DropDownContent>
<views:OperatorToolboxView Width="220" Height="400" /> <views:OperatorToolboxView Width="280" Height="480" />
</telerik:RadRibbonDropDownButton.DropDownContent> </telerik:RadRibbonDropDownButton.DropDownContent>
</telerik:RadRibbonDropDownButton> </telerik:RadRibbonDropDownButton>
</telerik:RadRibbonGroup> </telerik:RadRibbonGroup>
<telerik:RadRibbonGroup <telerik:RadRibbonGroup Header="CNC">
telerik:ScreenTip.Description="Show the Number tab of the Format Cells dialog box."
telerik:ScreenTip.Title="Format Cells: Number"
DialogLauncherCommand="{Binding Path=ShowFormatCellsDialog.Command}"
DialogLauncherCommandParameter="Number"
DialogLauncherVisibility="{Binding Path=ShowFormatCellsDialog.IsEnabled, Converter={StaticResource BoolToVisibilityValueConverter}}"
Header="CNC"
IsEnabled="{Binding Path=NumberGroup.IsEnabled}">
<telerik:RadRibbonGroup.Variants> <telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" /> <telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants> </telerik:RadRibbonGroup.Variants>
<telerik:RadOrderedWrapPanel> <StackPanel>
<telerik:RadRibbonButton
<spreadsheetControls:NumberFormatAutoCompleteComboBox telerik:ScreenTip.Title="新建CNC"
telerik:ScreenTip.Description="Choose how the values in a cell are displayed: as a percentage, as currency, as a date or time, etc." Command="{Binding Path=SetStyle.Command}"
telerik:ScreenTip.Title="Number Format" Size="Medium"
CellValueFormat="{Binding ElementName=radSpreadsheet, Path=CommandDescriptors.SetFormat.SelectedValue, Mode=TwoWay}" SmallImage="/Assets/Icons/new-doc.png"
IsEnabled="{Binding ElementName=radSpreadsheet, Path=CommandDescriptors.SetFormat.IsEnabled, Mode=TwoWay}" Text="新建CNC" />
RadSpreadsheet="{Binding ElementName=radSpreadsheet, Mode=OneTime}" /> <telerik:RadRibbonButton
telerik:ScreenTip.Title="参考点"
<telerik:RadButtonGroup Margin="0,0,3,0"> Command="{Binding Path=SetStyle.Command}"
<telerik:RadRibbonButton Size="Medium"
telerik:ScreenTip.Description="Display the value of the cell as a percentage." SmallImage="/Assets/Icons/reference.png"
telerik:ScreenTip.Title="新建CNC" Text="参考点" />
Command="{Binding Path=SetStyle.Command}" <telerik:RadRibbonButton
Size="Small" telerik:ScreenTip.Title="保存"
SmallImage="/Assets/Icons/new-doc.png" Command="{Binding Path=SetStyle.Command}"
Text="新建CNC" /> Size="Medium"
<telerik:RadRibbonButton SmallImage="/Assets/Icons/save.png"
telerik:ScreenTip.Description="Display the value of the cell as a percentage." Text="保存" />
telerik:ScreenTip.Title="新建CNC" </StackPanel>
Command="{Binding Path=SetStyle.Command}" <StackPanel>
Size="Small" <telerik:RadRibbonButton
SmallImage="/Assets/Icons/reference.png" telerik:ScreenTip.Title="全部保存"
Text="参考点" /> Command="{Binding Path=SetStyle.Command}"
<telerik:RadRibbonButton Size="Medium"
telerik:ScreenTip.Description="Display the value of the cell as a percentage." SmallImage="/Assets/Icons/saveall.png"
telerik:ScreenTip.Title="新建CNC" Text="全部保存" />
Command="{Binding Path=SetStyle.Command}" <telerik:RadRibbonButton
Size="Small" telerik:ScreenTip.Title="添加位置"
SmallImage="/Assets/Icons/save.png" Command="{Binding Path=SetStyle.Command}"
Text="参考点" /> Size="Medium"
<telerik:RadRibbonButton SmallImage="/Assets/Icons/add-pos.png"
telerik:ScreenTip.Description="Display the value of the cell as a percentage." Text="添加位置" />
telerik:ScreenTip.Title="新建CNC" <telerik:RadRibbonButton
Command="{Binding Path=SetStyle.Command}" telerik:ScreenTip.Title="模块"
Size="Small" Command="{Binding Path=SetStyle.Command}"
SmallImage="/Assets/Icons/saveall.png" Size="Medium"
Text="参考点" /> SmallImage="/Assets/Icons/Module.png"
</telerik:RadButtonGroup> Text="模块" />
<telerik:RadButtonGroup Margin="0,0,3,0"> </StackPanel>
<telerik:RadRibbonButton <StackPanel>
telerik:ScreenTip.Description="Display the value of the cell as a percentage." <telerik:RadRibbonButton
telerik:ScreenTip.Title="新建CNC" telerik:ScreenTip.Title="标记"
Command="{Binding Path=SetStyle.Command}" Command="{Binding Path=SetStyle.Command}"
Size="Small" Size="Medium"
SmallImage="/Assets/Icons/add-pos.png" SmallImage="/Assets/Icons/mark.png"
Text="新建CNC" /> Text="标记" />
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Description="Display the value of the cell as a percentage." telerik:ScreenTip.Title="消息"
telerik:ScreenTip.Title="新建CNC" Command="{Binding Path=SetStyle.Command}"
Command="{Binding Path=SetStyle.Command}" Size="Medium"
Size="Small" SmallImage="/Assets/Icons/message.png"
SmallImage="/Assets/Icons/Module.png" Text="消息" />
Text="参考点" /> <telerik:RadRibbonButton
<telerik:RadRibbonButton telerik:ScreenTip.Title="等待"
telerik:ScreenTip.Description="Display the value of the cell as a percentage." Command="{Binding Path=SetStyle.Command}"
telerik:ScreenTip.Title="新建CNC" Size="Medium"
Command="{Binding Path=SetStyle.Command}" SmallImage="/Assets/Icons/wait.png"
Size="Small" Text="等待" />
SmallImage="/Assets/Icons/mark.png" </StackPanel>
Text="参考点" /> <StackPanel>
<telerik:RadRibbonButton <telerik:RadRibbonButton
telerik:ScreenTip.Description="Display the value of the cell as a percentage." telerik:ScreenTip.Title="完成"
telerik:ScreenTip.Title="新建CNC" Command="{Binding Path=SetStyle.Command}"
Command="{Binding Path=SetStyle.Command}" Size="Medium"
Size="Small" SmallImage="/Assets/Icons/finish.png"
SmallImage="/Assets/Icons/message.png" Text="完成" />
Text="参考点" /> </StackPanel>
<telerik:RadRibbonButton
telerik:ScreenTip.Description="Display the value of the cell as a percentage."
telerik:ScreenTip.Title="新建CNC"
Command="{Binding Path=SetStyle.Command}"
Size="Small"
SmallImage="/Assets/Icons/wait.png"
Text="参考点" />
<telerik:RadRibbonButton
telerik:ScreenTip.Description="Display the value of the cell as a percentage."
telerik:ScreenTip.Title="新建CNC"
Command="{Binding Path=SetStyle.Command}"
Size="Small"
SmallImage="/Assets/Icons/finish.png"
Text="参考点" />
</telerik:RadButtonGroup>
</telerik:RadOrderedWrapPanel>
</telerik:RadRibbonGroup> </telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="高级模块" IsEnabled="{Binding Path=CellsGroup.IsEnabled}"> <telerik:RadRibbonGroup Header="高级模块" IsEnabled="{Binding Path=CellsGroup.IsEnabled}">
@@ -402,7 +367,7 @@
Command="{Binding Path=ShowHyperlinkDialog.Command}" Command="{Binding Path=ShowHyperlinkDialog.Command}"
Content="螺旋扫描" Content="螺旋扫描"
IsEnabled="{Binding Path=ShowHyperlinkDialog.IsEnabled}" IsEnabled="{Binding Path=ShowHyperlinkDialog.IsEnabled}"
LargeImage="/Assets/Icons/quick-scan.png" LargeImage="/Assets/Icons/spiral.png"
Size="Large" /> Size="Large" />
</telerik:RadRibbonGroup> </telerik:RadRibbonGroup>
@@ -423,9 +388,26 @@
</telerik:RadRibbonGroup> </telerik:RadRibbonGroup>
</telerik:RadRibbonTab> </telerik:RadRibbonTab>
<telerik:RadRibbonTab Header="关于">
<telerik:RadRibbonGroup Header="关于">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonButton
LargeImage="/Assets/Icons/tools.png"
Size="Large"
Text="关于 XplorePlane" />
</telerik:RadRibbonGroup>
<telerik:RadRibbonGroup Header="帮助">
<telerik:RadRibbonGroup.Variants>
<telerik:GroupVariant Priority="0" Variant="Large" />
</telerik:RadRibbonGroup.Variants>
<telerik:RadRibbonButton
LargeImage="/Assets/Icons/message.png"
Size="Large"
Text="帮助文档" />
</telerik:RadRibbonGroup>
</telerik:RadRibbonTab>
<telerik:RadRibbonView.ContextualGroups> <telerik:RadRibbonView.ContextualGroups>
<telerik:RadRibbonContextualGroup <telerik:RadRibbonContextualGroup
@@ -473,7 +455,6 @@
<Grid Grid.Column="3"> <Grid Grid.Column="3">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="250*" /> <ColumnDefinition Width="250*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="100" /> <RowDefinition Height="100" />
@@ -523,8 +504,6 @@
FontSize="11" FontSize="11"
Foreground="White" Foreground="White"
Text="x: 0 y: 0 RGB: 0 0 0" /> Text="x: 0 y: 0 RGB: 0 0 0" />
</Grid> </Grid>
</Border> </Border>
</Grid> </Grid>
+1 -1
View File
@@ -187,7 +187,7 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>Libs\ImageProcessing\zh-CN\%(Filename)%(Extension)</Link> <Link>Libs\ImageProcessing\zh-CN\%(Filename)%(Extension)</Link>
</None> </None>
<Content Include="GapInspect.ico" /> <Resource Include="GapInspect.ico" />
<!-- 配置文件 --> <!-- 配置文件 -->
<None Update="App.config"> <None Update="App.config">