显示CNC文件名,取消节点的上、下移动

This commit is contained in:
zhengxuan.zhang
2026-04-23 17:50:11 +08:00
parent c9c0d93d8a
commit 2042c6c949
3 changed files with 32 additions and 28 deletions
@@ -33,6 +33,7 @@ namespace XplorePlane.ViewModels.Cnc
private CncNodeViewModel _selectedNode; private CncNodeViewModel _selectedNode;
private bool _isModified; private bool _isModified;
private string _programName; private string _programName;
private string _programDisplayName = "NewCncProgram";
private Guid? _preferredSelectedNodeId; private Guid? _preferredSelectedNodeId;
public CncEditorViewModel( public CncEditorViewModel(
@@ -110,6 +111,12 @@ namespace XplorePlane.ViewModels.Cnc
set => SetProperty(ref _programName, value); set => SetProperty(ref _programName, value);
} }
public string ProgramDisplayName
{
get => _programDisplayName;
private set => SetProperty(ref _programDisplayName, value);
}
public DelegateCommand InsertReferencePointCommand { get; } public DelegateCommand InsertReferencePointCommand { get; }
public DelegateCommand InsertSaveNodeWithImageCommand { get; } public DelegateCommand InsertSaveNodeWithImageCommand { get; }
public DelegateCommand InsertSaveNodeCommand { get; } public DelegateCommand InsertSaveNodeCommand { get; }
@@ -256,6 +263,7 @@ namespace XplorePlane.ViewModels.Cnc
return; return;
await _cncProgramService.SaveAsync(_currentProgram, dlg.FileName); await _cncProgramService.SaveAsync(_currentProgram, dlg.FileName);
ProgramDisplayName = Path.GetFileName(dlg.FileName);
IsModified = false; IsModified = false;
} }
catch (Exception ex) catch (Exception ex)
@@ -280,6 +288,7 @@ namespace XplorePlane.ViewModels.Cnc
_currentProgram = await _cncProgramService.LoadAsync(dlg.FileName); _currentProgram = await _cncProgramService.LoadAsync(dlg.FileName);
ProgramName = _currentProgram.Name; ProgramName = _currentProgram.Name;
ProgramDisplayName = Path.GetFileName(dlg.FileName);
IsModified = false; IsModified = false;
RefreshNodes(); RefreshNodes();
} }
@@ -294,6 +303,7 @@ namespace XplorePlane.ViewModels.Cnc
var name = string.IsNullOrWhiteSpace(ProgramName) ? "NewCncProgram" : ProgramName; var name = string.IsNullOrWhiteSpace(ProgramName) ? "NewCncProgram" : ProgramName;
_currentProgram = _cncProgramService.CreateProgram(name); _currentProgram = _cncProgramService.CreateProgram(name);
ProgramName = _currentProgram.Name; ProgramName = _currentProgram.Name;
ProgramDisplayName = FormatProgramDisplayName(_currentProgram.Name);
IsModified = false; IsModified = false;
RefreshNodes(); RefreshNodes();
} }
@@ -622,5 +632,11 @@ namespace XplorePlane.ViewModels.Cnc
.GetEvent<CncProgramChangedEvent>() .GetEvent<CncProgramChangedEvent>()
.Publish(new CncProgramChangedPayload(ProgramName ?? string.Empty, IsModified)); .Publish(new CncProgramChangedPayload(ProgramName ?? string.Empty, IsModified));
} }
private static string FormatProgramDisplayName(string programName)
{
var name = string.IsNullOrWhiteSpace(programName) ? "NewCncProgram" : programName;
return name.EndsWith(".xp", StringComparison.OrdinalIgnoreCase) ? name : $"{name}.xp";
}
} }
} }
+3 -28
View File
@@ -106,14 +106,14 @@
FontFamily="{StaticResource UiFont}" FontFamily="{StaticResource UiFont}"
FontSize="13" FontSize="13"
FontWeight="SemiBold" FontWeight="SemiBold"
Text="{Binding ProgramName, TargetNullValue=CNC编辑}" Text="{Binding ProgramDisplayName, TargetNullValue=CNC编辑}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<TextBlock <TextBlock
Margin="0,3,0,0" Margin="0,3,0,0"
FontFamily="{StaticResource UiFont}" FontFamily="{StaticResource UiFont}"
FontSize="10" FontSize="10"
Foreground="#666666" Foreground="#666666"
Text="保存位置节点下会自动显示检测标记和检测模块,清晰表达当前检测位置与检测内容的父子关系。" Text="新建或加载已有的CNC检测程序,后缀.xp。"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
</StackPanel> </StackPanel>
</Border> </Border>
@@ -125,6 +125,7 @@
Background="Transparent" Background="Transparent"
BorderThickness="0" BorderThickness="0"
ItemsSource="{Binding TreeNodes}" ItemsSource="{Binding TreeNodes}"
PreviewKeyDown="CncTreeView_PreviewKeyDown"
SelectedItemChanged="CncTreeView_SelectedItemChanged"> SelectedItemChanged="CncTreeView_SelectedItemChanged">
<TreeView.Resources> <TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type vm:CncNodeViewModel}" ItemsSource="{Binding Children}"> <HierarchicalDataTemplate DataType="{x:Type vm:CncNodeViewModel}" ItemsSource="{Binding Children}">
@@ -204,32 +205,6 @@
VerticalAlignment="Center" VerticalAlignment="Center"
Orientation="Horizontal" Orientation="Horizontal"
Visibility="Collapsed"> Visibility="Collapsed">
<Button
Width="20"
Height="20"
Margin="1,0"
Background="White"
BorderBrush="#CDCBCB"
BorderThickness="1"
Command="{Binding DataContext.MoveNodeUpCommand, RelativeSource={RelativeSource AncestorType=TreeView}}"
CommandParameter="{Binding}"
Content="↑"
Cursor="Hand"
FontSize="10"
ToolTip="上移" />
<Button
Width="20"
Height="20"
Margin="1,0"
Background="White"
BorderBrush="#CDCBCB"
BorderThickness="1"
Command="{Binding DataContext.MoveNodeDownCommand, RelativeSource={RelativeSource AncestorType=TreeView}}"
CommandParameter="{Binding}"
Content="↓"
Cursor="Hand"
FontSize="10"
ToolTip="下移" />
<Button <Button
Width="20" Width="20"
Height="20" Height="20"
+13
View File
@@ -4,6 +4,7 @@ using System.Globalization;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Input;
using XP.Common.Logging.Interfaces; using XP.Common.Logging.Interfaces;
using XplorePlane.Services; using XplorePlane.Services;
using XplorePlane.ViewModels.Cnc; using XplorePlane.ViewModels.Cnc;
@@ -70,6 +71,18 @@ namespace XplorePlane.Views.Cnc
viewModel.SelectedNode = e.NewValue as CncNodeViewModel; viewModel.SelectedNode = e.NewValue as CncNodeViewModel;
} }
} }
private void CncTreeView_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Delete || DataContext is not CncEditorViewModel viewModel)
return;
if (!viewModel.DeleteNodeCommand.CanExecute())
return;
viewModel.DeleteNodeCommand.Execute();
e.Handled = true;
}
} }
public class NullToVisibilityConverter : IValueConverter public class NullToVisibilityConverter : IValueConverter