mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
思维导图修改成回车新增子节点
This commit is contained in:
@@ -399,8 +399,8 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
protected override void OnMouseMove(MouseEventArgs e)
|
||||
{
|
||||
//var focusedElement = Keyboard.FocusedElement;
|
||||
//Debug.WriteLine("focusedElement:" + focusedElement?.ToString());
|
||||
var focusedElement = Keyboard.FocusedElement;
|
||||
Debug.WriteLine("focusedElement:" + focusedElement?.ToString());
|
||||
|
||||
base.OnMouseMove(e);
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Xaml.Behaviors;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
public class TextBoxEnterKeyUpdateBehavior : Behavior<TextBox>
|
||||
{
|
||||
protected override void OnAttached()
|
||||
{
|
||||
if (this.AssociatedObject != null)
|
||||
{
|
||||
base.OnAttached();
|
||||
this.AssociatedObject.KeyDown += AssociatedObject_KeyDown;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnDetaching()
|
||||
{
|
||||
if (this.AssociatedObject != null)
|
||||
{
|
||||
this.AssociatedObject.KeyDown -= AssociatedObject_KeyDown;
|
||||
base.OnDetaching();
|
||||
}
|
||||
}
|
||||
|
||||
private void AssociatedObject_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
|
||||
{
|
||||
TextBox textBox = sender as TextBox;
|
||||
if (textBox != null)
|
||||
{
|
||||
if (e.Key == Key.Return)
|
||||
{
|
||||
if (e.Key == Key.Enter)
|
||||
{
|
||||
textBox.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@
|
||||
HorizontalContentAlignment="{Binding FontViewModel.HorizontalAlignment}"
|
||||
VerticalContentAlignment="{Binding FontViewModel.VerticalAlignment}"
|
||||
TextBlock.LineHeight="{Binding FontViewModel.LineHeight}"
|
||||
AcceptsReturn="True"
|
||||
AcceptsReturn="{Binding AcceptsReturn,RelativeSource={RelativeSource AncestorType=dd:TextControl}}"
|
||||
IsHitTestVisible="False"
|
||||
dd:ControlAttachProperty.Watermark="{Binding Path=(dd:ControlAttachProperty.Watermark),RelativeSource={RelativeSource AncestorType={x:Type dd:TextControl}}}"
|
||||
Style="{StaticResource WaterTextBoxWithEffect}" IsReadOnly="True">
|
||||
@@ -49,7 +49,7 @@
|
||||
HorizontalContentAlignment="{Binding FontViewModel.HorizontalAlignment}"
|
||||
VerticalContentAlignment="{Binding FontViewModel.VerticalAlignment}"
|
||||
TextBlock.LineHeight="{Binding FontViewModel.LineHeight}"
|
||||
AcceptsReturn="True"
|
||||
AcceptsReturn="{Binding AcceptsReturn,RelativeSource={RelativeSource AncestorType=dd:TextControl}}"
|
||||
Focusable="False"
|
||||
dd:ControlAttachProperty.Watermark="{Binding Path=(dd:ControlAttachProperty.Watermark),RelativeSource={RelativeSource AncestorType={x:Type dd:TextControl}}}"
|
||||
Style="{StaticResource WaterTextBoxWithEffect}" Visibility="Collapsed">
|
||||
|
||||
@@ -18,6 +18,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
/// </summary>
|
||||
public partial class TextControl : UserControl
|
||||
{
|
||||
public static readonly DependencyProperty AcceptsReturnProperty = DependencyProperty.Register(
|
||||
nameof(AcceptsReturn), typeof(bool), typeof(TextControl), new FrameworkPropertyMetadata(
|
||||
true));
|
||||
|
||||
public bool AcceptsReturn
|
||||
{
|
||||
get => (bool)GetValue(AcceptsReturnProperty);
|
||||
set => SetValue(AcceptsReturnProperty, value);
|
||||
}
|
||||
|
||||
public TextControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -78,9 +88,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
BindingExpression binding = PART_ShowText.GetBindingExpression(TextBox.TextProperty);
|
||||
binding.UpdateSource();
|
||||
|
||||
PART_ShowText.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
|
||||
PART_ShowText.Visibility = Visibility.Collapsed;
|
||||
PART_TextBlock.Visibility = Visibility.Visible;
|
||||
|
||||
PART_TextBlock.Visibility = Visibility.Visible;
|
||||
|
||||
|
||||
selectable.IsEditing = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,5 +150,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
get; set;
|
||||
} = e => e.KeyboardDevice.Modifiers == ModifierKeys.Alt | e.Key == Key.A;
|
||||
|
||||
[Description("Next Node (CEnter by default)")]
|
||||
public Func<KeyEventArgs, bool> Next
|
||||
{
|
||||
get; set;
|
||||
} = e => e.KeyboardDevice.Modifiers == ModifierKeys.None && e.Key == Key.Enter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ using AIStudio.Wpf.DiagramDesigner.Helpers;
|
||||
using AIStudio.Wpf.DiagramDesigner.Models;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
@@ -735,6 +736,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
private ICommand _nextCommand;
|
||||
public ICommand NextCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._nextCommand ?? (this._nextCommand = new SimpleCommand(ExecuteEnable, ExecuteNextCommand));
|
||||
}
|
||||
}
|
||||
|
||||
private ICommand _alignTopCommand;
|
||||
public ICommand AlignTopCommand
|
||||
{
|
||||
@@ -1511,6 +1521,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void ExecuteNextCommand(object parameter)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void ExecuteSelectAllCommand(object parameter)
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> selectedItems = Items.ToList();
|
||||
@@ -3146,7 +3161,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
ReplaceAllCommand.Execute(new object[] { SearchText, ReplaceText });
|
||||
return true;
|
||||
}
|
||||
|
||||
else if (DiagramOption.ShortcutOption.Next(e))
|
||||
{
|
||||
NextCommand.Execute(null);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -44,10 +44,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
protected override void Init(IDiagramViewModel root, bool initNew)
|
||||
{
|
||||
base.Init(root, initNew);
|
||||
|
||||
SelectItemCommand = new SimpleCommand(Command_Enable, ExecuteSelectItemCommand);
|
||||
EditCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand);
|
||||
base.Init(root, initNew);
|
||||
}
|
||||
|
||||
protected override void InitNew()
|
||||
@@ -69,13 +66,31 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
return true;
|
||||
}
|
||||
|
||||
private ICommand _selectItemCommand;
|
||||
public ICommand SelectItemCommand
|
||||
{
|
||||
get; private set;
|
||||
get
|
||||
{
|
||||
return this._editCommand ?? (this._editCommand = new SimpleCommand(Command_Enable, ExecuteSelectItemCommand));
|
||||
}
|
||||
}
|
||||
|
||||
private ICommand _editCommand;
|
||||
public ICommand EditCommand
|
||||
{
|
||||
get; private set;
|
||||
get
|
||||
{
|
||||
return this._editCommand ?? (this._editCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand));
|
||||
}
|
||||
}
|
||||
|
||||
private ICommand _exitEditCommand;
|
||||
public ICommand ExitEditCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._exitEditCommand ?? (this._exitEditCommand = new SimpleCommand(Command_Enable, ExecuteExitEditCommand));
|
||||
}
|
||||
}
|
||||
|
||||
private bool enabledForSelection = true;
|
||||
@@ -162,6 +177,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (IsReadOnly == true) return;
|
||||
|
||||
ShowText = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void ExecuteExitEditCommand(object param)
|
||||
{
|
||||
IsSelected = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
get;
|
||||
}
|
||||
ICommand NextCommand
|
||||
{
|
||||
get;
|
||||
}
|
||||
ICommand AlignTopCommand
|
||||
{
|
||||
get;
|
||||
@@ -204,7 +208,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
get;
|
||||
}
|
||||
ICommand ShowSearchCommand
|
||||
ICommand ShowSearchCommand
|
||||
{
|
||||
get;
|
||||
}
|
||||
@@ -368,7 +372,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
DoCommandManager DoCommandManager
|
||||
{
|
||||
get;
|
||||
get;
|
||||
}
|
||||
#region 设置选项
|
||||
DiagramOption DiagramOption
|
||||
|
||||
@@ -88,7 +88,11 @@
|
||||
<controls:PriorityControl Grid.Column="1" Priority="{Binding Priority}"
|
||||
Visibility="{Binding Priority,Converter={StaticResource NullableToVisibilityConverter}}"
|
||||
IsHitTestVisible="False"/>
|
||||
<dd:TextControl Grid.Column="2" IsHitTestVisible="{Binding IsEditing}"/>
|
||||
<dd:TextControl Grid.Column="2" IsHitTestVisible="{Binding IsEditing}" AcceptsReturn="False">
|
||||
<dd:TextControl.InputBindings>
|
||||
<KeyBinding Key="Enter" Command="{Binding ExitEditCommand}" />
|
||||
</dd:TextControl.InputBindings>
|
||||
</dd:TextControl>
|
||||
<controls:LinkControl Grid.Column="3"
|
||||
Visibility="{Binding LinkInfo,Converter={StaticResource NullableToVisibilityConverter}}"
|
||||
Url="{Binding LinkInfo.Link}"
|
||||
|
||||
@@ -456,7 +456,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
RaisePropertyChanged(nameof(MindType));
|
||||
RaisePropertyChanged(nameof(MindTheme));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -592,13 +592,19 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
foreach (var item in items)
|
||||
{
|
||||
if (item.ParentNode == null)
|
||||
continue;
|
||||
|
||||
int index = item.ParentNode.Children.IndexOf(item);
|
||||
var newitem = new MindNode(this) { Text = $"分支主题{item.ParentNode.Children.Count + 1}" };
|
||||
item.IsSelected = false;
|
||||
newitem.AddTo(item.ParentNode, index + 1);
|
||||
newitems.Add(newitem);
|
||||
{
|
||||
var newitem = new MindNode(this) { Text = $"分支主题{item.Children.Count + 1}" };
|
||||
newitem.AddTo(item);
|
||||
newitems.Add(newitem);
|
||||
}
|
||||
else
|
||||
{
|
||||
int index = item.ParentNode.Children.IndexOf(item);
|
||||
var newitem = new MindNode(this) { Text = $"分支主题{item.ParentNode.Children.Count + 1}" };
|
||||
item.IsSelected = false;
|
||||
newitem.AddTo(item.ParentNode, index + 1);
|
||||
newitems.Add(newitem);
|
||||
}
|
||||
}
|
||||
|
||||
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
|
||||
@@ -614,6 +620,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
});
|
||||
}
|
||||
|
||||
public override void ExecuteNextCommand(object parameter)
|
||||
{
|
||||
ExecuteAddPearCommand(parameter);
|
||||
}
|
||||
|
||||
private void ExecuteMoveBackCommand(object parameter)
|
||||
{
|
||||
List<MindNode> items = new List<MindNode>();
|
||||
@@ -1083,7 +1094,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
roots = MindSelectedItems.Select(p => p.RootNode).Distinct().ToList();
|
||||
}
|
||||
|
||||
|
||||
if (roots.Count > 0)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
|
||||
@@ -746,7 +746,10 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
IsSelected = selected;
|
||||
}
|
||||
|
||||
|
||||
protected override void ExecuteExitEditCommand(object param)
|
||||
{
|
||||
Root.NextCommand.Execute(this);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user