From d358c31a7d18f40cbbb514064d7724b5f2b1aee0 Mon Sep 17 00:00:00 2001
From: tian <11429339@qq.com>
Date: Sun, 31 May 2026 15:52:03 +0800
Subject: [PATCH] feat: inline editing with click-to-edit, TextBox overlay,
Focus+SelectAll
- Grid overlay: TextBox covers TextBlock when editing (no more dual display)
- EditValue property: auto-initialized to DisplayName on edit start
- Click on already-selected node enters inline edit (PreviewMouseLeftButtonDown)
- Right-click auto-selects node before context menu
- TextBox IsVisibleChanged: Focus + SelectAll on Loaded priority
- XAML Visibility moved to Style setter (fix DataTrigger precedence)
- Light yellow background (#FFFFFDE6)
---
src/UI/WPF/ViewModels/AliasNodeViewModel.cs | 23 ++-
src/UI/WPF/Views/AliasTreeControl.xaml | 51 +++---
src/UI/WPF/Views/AliasTreeControl.xaml.cs | 176 +++++++++++++++++---
3 files changed, 191 insertions(+), 59 deletions(-)
diff --git a/src/UI/WPF/ViewModels/AliasNodeViewModel.cs b/src/UI/WPF/ViewModels/AliasNodeViewModel.cs
index e4d5a48..8321c58 100644
--- a/src/UI/WPF/ViewModels/AliasNodeViewModel.cs
+++ b/src/UI/WPF/ViewModels/AliasNodeViewModel.cs
@@ -1,5 +1,6 @@
using System;
using System.ComponentModel;
+using System.Windows.Input;
using Autodesk.Navisworks.Api;
namespace NavisworksTransport.UI.WPF.ViewModels
@@ -56,9 +57,25 @@ namespace NavisworksTransport.UI.WPF.ViewModels
public bool IsEditing
{
get => _isEditing;
- set { _isEditing = value; OnPropertyChanged(nameof(IsEditing)); }
+ set
+ {
+ if (_isEditing == value) return;
+ _isEditing = value;
+ OnPropertyChanged(nameof(IsEditing));
+ // 进入编辑时初始化 EditValue 为当前显示名
+ if (value)
+ EditValue = DisplayName;
+ }
}
+ /// 编辑框的临时文本(进入编辑时初始化为 DisplayName)
+ public string EditValue
+ {
+ get => _editValue;
+ set { _editValue = value; OnPropertyChanged(nameof(EditValue)); }
+ }
+ private string _editValue;
+
/// 是否孤儿节点(模型结构变化后无法定位)
public bool IsOrphan
{
@@ -92,8 +109,12 @@ namespace NavisworksTransport.UI.WPF.ViewModels
public AliasNodeViewModel()
{
+ StartEditCommand = new RelayCommand(() => IsEditing = true);
}
+ /// 启动内联编辑的命令
+ public ICommand StartEditCommand { get; }
+
///
/// 刷新显示文本(别名变更新调用)
///
diff --git a/src/UI/WPF/Views/AliasTreeControl.xaml b/src/UI/WPF/Views/AliasTreeControl.xaml
index 58f8ede..fd05572 100644
--- a/src/UI/WPF/Views/AliasTreeControl.xaml
+++ b/src/UI/WPF/Views/AliasTreeControl.xaml
@@ -2,7 +2,8 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:NavisworksTransport.UI.WPF.ViewModels"
- xmlns:converters="clr-namespace:NavisworksTransport.UI.WPF.Converters">
+ xmlns:converters="clr-namespace:NavisworksTransport.UI.WPF.Converters"
+ PreviewKeyDown="UserControl_PreviewKeyDown">
@@ -16,16 +17,16 @@
-
-
-
+
+
-
-
+
-
-
-
-
+
@@ -98,14 +91,6 @@
-