#0023 整理项目结构

This commit is contained in:
zhengxuan.zhang
2026-03-15 00:24:02 +08:00
parent dc35faabf1
commit 1b1b0872c7
43 changed files with 303 additions and 220 deletions
@@ -0,0 +1,303 @@
<UserControl
x:Class="XplorePlane.Views.PipelineEditorView"
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:telerik="http://schemas.telerik.com/2008/xaml/presentation"
d:DesignHeight="700"
d:DesignWidth="400"
mc:Ignorable="d">
<UserControl.Resources>
<SolidColorBrush x:Key="PanelBg" Color="White" />
<SolidColorBrush x:Key="PanelBorder" Color="#cdcbcb" />
<SolidColorBrush x:Key="SeparatorBrush" Color="#E0E0E0" />
<SolidColorBrush x:Key="AccentBlue" Color="#E3F0FF" />
<FontFamily x:Key="CsdFont">Microsoft YaHei UI</FontFamily>
<!-- 节点项样式 -->
<Style x:Key="PipelineNodeItemStyle" TargetType="telerik:RadListBoxItem">
<Setter Property="Padding" Value="0" />
<Setter Property="Margin" Value="0" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
<!-- 工具栏按钮样式 -->
<Style x:Key="ToolbarBtn" TargetType="Button">
<Setter Property="Width" Value="28" />
<Setter Property="Height" Value="28" />
<Setter Property="Margin" Value="2,0" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="#cdcbcb" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="FontFamily" Value="Microsoft YaHei UI" />
<Setter Property="FontSize" Value="11" />
<Setter Property="Cursor" Value="Hand" />
</Style>
</UserControl.Resources>
<Border
Background="{StaticResource PanelBg}"
BorderBrush="{StaticResource PanelBorder}"
BorderThickness="1"
CornerRadius="4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="36" />
<RowDefinition Height="2*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- 标题栏:流水线名称 + 设备选择 -->
<Border
Grid.Row="0"
Padding="8,5"
Background="#F0F0F0"
BorderBrush="{StaticResource PanelBorder}"
BorderThickness="0,0,0,1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="120" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Margin="0,0,8,0"
VerticalAlignment="Center"
FontFamily="{StaticResource CsdFont}"
FontSize="12"
FontWeight="Bold"
Foreground="#1c1c1b"
Text="图像处理 ▾" />
<TextBox
Grid.Column="1"
VerticalAlignment="Center"
Background="Transparent"
BorderThickness="0"
FontFamily="{StaticResource CsdFont}"
FontSize="11"
Text="{Binding PipelineName, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock
Grid.Column="2"
Margin="0,0,4,0"
VerticalAlignment="Center"
FontFamily="{StaticResource CsdFont}"
FontSize="11"
Text="设备:" />
<telerik:RadComboBox
Grid.Column="3"
Height="22"
FontFamily="{StaticResource CsdFont}"
FontSize="11"
ItemsSource="{Binding AvailableDevices}"
SelectedItem="{Binding SelectedDevice}" />
</Grid>
</Border>
<!-- 工具栏 -->
<Border
Grid.Row="1"
Padding="6,4"
Background="#F5F5F5"
BorderBrush="{StaticResource PanelBorder}"
BorderThickness="0,1,0,1">
<Grid>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<Button
Command="{Binding NewPipelineCommand}"
Content="新"
Style="{StaticResource ToolbarBtn}"
ToolTip="新建流水线" />
<Button
Command="{Binding SavePipelineCommand}"
Content="存"
Style="{StaticResource ToolbarBtn}"
ToolTip="保存流水线" />
<Button
Command="{Binding SaveAsPipelineCommand}"
Content="另"
Style="{StaticResource ToolbarBtn}"
ToolTip="另存为" />
<Button
Command="{Binding ExecutePipelineCommand}"
Content="▶"
Style="{StaticResource ToolbarBtn}"
ToolTip="执行流水线" />
<Button
Command="{Binding CancelExecutionCommand}"
Content="■"
Style="{StaticResource ToolbarBtn}"
ToolTip="取消执行" />
</StackPanel>
<Button
HorizontalAlignment="Right"
Command="{Binding DeletePipelineCommand}"
Content="🗑"
Style="{StaticResource ToolbarBtn}"
ToolTip="删除流水线" />
</Grid>
</Border>
<!-- 流水线节点列表(拖拽目标) -->
<telerik:RadListBox
x:Name="PipelineListBox"
Grid.Row="2"
Background="Transparent"
BorderThickness="0"
ItemContainerStyle="{StaticResource PipelineNodeItemStyle}"
ItemsSource="{Binding PipelineNodes}"
SelectedItem="{Binding SelectedNode, Mode=TwoWay}">
<telerik:RadListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 竖线连接 -->
<Canvas Grid.Column="0" Width="20">
<Line
Stroke="#5B9BD5"
StrokeThickness="2"
X1="10"
X2="10"
Y1="0"
Y2="40" />
<Rectangle
Canvas.Left="3"
Canvas.Top="12"
Width="14"
Height="14"
Fill="White"
RadiusX="2"
RadiusY="2"
Stroke="#5B9BD5"
StrokeThickness="1.5" />
</Canvas>
<!-- 节点行 -->
<Border
Grid.Column="1"
Padding="6,8"
BorderBrush="Transparent"
BorderThickness="0">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="Transparent" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Background" Value="{StaticResource AccentBlue}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Orientation="Horizontal">
<Border
Width="28"
Height="28"
Margin="0,0,8,0"
Background="#E8F0FE"
CornerRadius="3">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="13"
Text="⚙" />
</Border>
<TextBlock
VerticalAlignment="Center"
FontFamily="Microsoft YaHei UI"
FontSize="12"
Text="{Binding DisplayName}" />
</StackPanel>
</Border>
</Grid>
</DataTemplate>
</telerik:RadListBox.ItemTemplate>
</telerik:RadListBox>
<!-- 分隔线 -->
<Rectangle
Grid.Row="3"
Height="1"
Fill="{StaticResource SeparatorBrush}" />
<!-- 参数面板 -->
<ScrollViewer
Grid.Row="4"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto">
<StackPanel Margin="8,6">
<TextBlock
Margin="0,0,0,4"
FontFamily="{StaticResource CsdFont}"
FontSize="11"
FontWeight="Bold"
Foreground="#555"
Text="参数配置" />
<ItemsControl ItemsSource="{Binding SelectedNode.Parameters}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="0,3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
VerticalAlignment="Center"
FontFamily="Microsoft YaHei UI"
FontSize="11"
Text="{Binding DisplayName}"
TextTrimming="CharacterEllipsis" />
<TextBox
Grid.Column="1"
Padding="4,2"
BorderBrush="#cdcbcb"
BorderThickness="1"
FontFamily="Microsoft YaHei UI"
FontSize="11"
Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="BorderBrush" Value="#cdcbcb" />
<Setter Property="Background" Value="White" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsValueValid}" Value="False">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="Background" Value="#FFF0F0" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ScrollViewer>
<!-- 状态栏 -->
<Border
Grid.Row="5"
Padding="3,3"
Background="#F5F5F5">
<TextBlock
FontFamily="{StaticResource CsdFont}"
FontSize="11"
Foreground="#555"
Text="{Binding StatusMessage}"
TextTrimming="CharacterEllipsis" />
</Border>
</Grid>
</Border>
</UserControl>
-220
View File
@@ -1,220 +0,0 @@
<UserControl x:Class="XplorePlane.Views.PipelineEditorView"
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:telerik="http://schemas.telerik.com/2008/xaml/presentation"
mc:Ignorable="d"
d:DesignHeight="700" d:DesignWidth="400">
<UserControl.Resources>
<SolidColorBrush x:Key="PanelBg" Color="White"/>
<SolidColorBrush x:Key="PanelBorder" Color="#cdcbcb"/>
<SolidColorBrush x:Key="SeparatorBrush" Color="#E0E0E0"/>
<SolidColorBrush x:Key="AccentBlue" Color="#E3F0FF"/>
<FontFamily x:Key="CsdFont">Microsoft YaHei UI</FontFamily>
<!-- 节点项样式 -->
<Style x:Key="PipelineNodeItemStyle" TargetType="telerik:RadListBoxItem">
<Setter Property="Padding" Value="0"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
<!-- 工具栏按钮样式 -->
<Style x:Key="ToolbarBtn" TargetType="Button">
<Setter Property="Width" Value="28"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Margin" Value="2,0"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="#cdcbcb"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="FontFamily" Value="Microsoft YaHei UI"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Cursor" Value="Hand"/>
</Style>
</UserControl.Resources>
<Border Background="{StaticResource PanelBg}"
BorderBrush="{StaticResource PanelBorder}"
BorderThickness="1" CornerRadius="4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="180"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- 标题栏:流水线名称 + 设备选择 -->
<Border Grid.Row="0" Background="#F0F0F0"
BorderBrush="{StaticResource PanelBorder}"
BorderThickness="0,0,0,1" Padding="8,5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="120"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="图像处理 ▾"
FontFamily="{StaticResource CsdFont}"
FontWeight="Bold" FontSize="12"
Foreground="#1c1c1b" VerticalAlignment="Center"
Margin="0,0,8,0"/>
<TextBox Grid.Column="1"
Text="{Binding PipelineName, UpdateSourceTrigger=PropertyChanged}"
FontFamily="{StaticResource CsdFont}" FontSize="11"
BorderThickness="0" Background="Transparent"
VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="设备:"
FontFamily="{StaticResource CsdFont}" FontSize="11"
VerticalAlignment="Center" Margin="0,0,4,0"/>
<telerik:RadComboBox Grid.Column="3"
ItemsSource="{Binding AvailableDevices}"
SelectedItem="{Binding SelectedDevice}"
FontFamily="{StaticResource CsdFont}" FontSize="11"
Height="22"/>
</Grid>
</Border>
<!-- 流水线节点列表(拖拽目标) -->
<telerik:RadListBox Grid.Row="1"
x:Name="PipelineListBox"
ItemsSource="{Binding PipelineNodes}"
SelectedItem="{Binding SelectedNode, Mode=TwoWay}"
BorderThickness="0"
Background="Transparent"
ItemContainerStyle="{StaticResource PipelineNodeItemStyle}">
<telerik:RadListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- 竖线连接 -->
<Canvas Grid.Column="0" Width="20">
<Line X1="10" Y1="0" X2="10" Y2="40"
Stroke="#5B9BD5" StrokeThickness="2"/>
<Rectangle Canvas.Left="3" Canvas.Top="12"
Width="14" Height="14"
Fill="White" Stroke="#5B9BD5" StrokeThickness="1.5"
RadiusX="2" RadiusY="2"/>
</Canvas>
<!-- 节点行 -->
<Border Grid.Column="1" Padding="6,8"
BorderBrush="Transparent" BorderThickness="0">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Background" Value="{StaticResource AccentBlue}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Orientation="Horizontal">
<Border Width="28" Height="28" Background="#E8F0FE"
CornerRadius="3" Margin="0,0,8,0">
<TextBlock Text="⚙" HorizontalAlignment="Center"
VerticalAlignment="Center" FontSize="13"/>
</Border>
<TextBlock Text="{Binding DisplayName}"
FontFamily="Microsoft YaHei UI" FontSize="12"
VerticalAlignment="Center"/>
</StackPanel>
</Border>
</Grid>
</DataTemplate>
</telerik:RadListBox.ItemTemplate>
</telerik:RadListBox>
<!-- 分隔线 -->
<Rectangle Grid.Row="2" Height="1" Fill="{StaticResource SeparatorBrush}"/>
<!-- 参数面板 -->
<ScrollViewer Grid.Row="3" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<StackPanel Margin="8,6">
<TextBlock Text="参数配置" FontFamily="{StaticResource CsdFont}"
FontWeight="Bold" FontSize="11" Foreground="#555"
Margin="0,0,0,4"/>
<ItemsControl ItemsSource="{Binding SelectedNode.Parameters}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="0,3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding DisplayName}"
FontFamily="Microsoft YaHei UI" FontSize="11"
VerticalAlignment="Center" TextTrimming="CharacterEllipsis"/>
<TextBox Grid.Column="1"
Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}"
FontFamily="Microsoft YaHei UI" FontSize="11"
Padding="4,2" BorderBrush="#cdcbcb" BorderThickness="1">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="BorderBrush" Value="#cdcbcb"/>
<Setter Property="Background" Value="White"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsValueValid}" Value="False">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="Background" Value="#FFF0F0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ScrollViewer>
<!-- 工具栏 -->
<Border Grid.Row="4" Background="#F5F5F5"
BorderBrush="{StaticResource PanelBorder}"
BorderThickness="0,1,0,1" Padding="6,4">
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<Button Content="新" Style="{StaticResource ToolbarBtn}"
Command="{Binding NewPipelineCommand}"
ToolTip="新建流水线"/>
<Button Content="存" Style="{StaticResource ToolbarBtn}"
Command="{Binding SavePipelineCommand}"
ToolTip="保存流水线"/>
<Button Content="另" Style="{StaticResource ToolbarBtn}"
Command="{Binding SaveAsPipelineCommand}"
ToolTip="另存为"/>
<Button Content="▶" Style="{StaticResource ToolbarBtn}"
Command="{Binding ExecutePipelineCommand}"
ToolTip="执行流水线"/>
<Button Content="■" Style="{StaticResource ToolbarBtn}"
Command="{Binding CancelExecutionCommand}"
ToolTip="取消执行"/>
</StackPanel>
<Button Content="🗑" Style="{StaticResource ToolbarBtn}"
HorizontalAlignment="Right"
Command="{Binding DeletePipelineCommand}"
ToolTip="删除流水线"/>
</Grid>
</Border>
<!-- 状态栏 -->
<Border Grid.Row="5" Background="#F5F5F5" Padding="8,3">
<TextBlock Text="{Binding StatusMessage}"
FontFamily="{StaticResource CsdFont}" FontSize="11"
Foreground="#555" TextTrimming="CharacterEllipsis"/>
</Border>
</Grid>
</Border>
</UserControl>