第八节:Nodify 编辑器属性

2024-08-23 18:04

本文主要是介绍第八节:Nodify 编辑器属性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

经过前几章的学习,你已经对Nodify框架有了初步的编程思路。当然只局限于这些还完全不够,本章节将阐述各个结构组件的一些常用属性,以便在日后的开发过程中更得心应手。

1、编辑器

平移
简介属性默认值
平移功能 控制DisablePanningfalse
平移过程中IsPanning =>true/
平移过程中ViewportSizeViewportLocation 和 ViewportTransform自动更新/
自动平移 控制DisableAutoPanningfalse
自动平移速度AutoPanSpeed15 pixels
触发自动平移的边缘距离AutoPanEdgeDistance1 millisecond
缩放
简介属性默认值
缩放功能 控制DisableZoomingfalse
缩放过程中ViewportSizeViewportLocation 和 ViewportTransform自动更新/
当前比例ViewportZoom1
最小比例MinViewportZoom0.1
最大比例MaxViewportZoom2
选择
简介属性默认值
鼠标拖动框选IsSelecting=>truefalse
缩放过程中SelectedArea自动更新/
当前选择节点集合SelectedItems/
实时选择,框选时节点选择状态立即变化,否则松开鼠标后再变化EnableRealtimeSelectiontrue
键鼠配合
  • Replace - 无修饰键(默认行为,清除已选项目并开始新选择)
  • Append - shift键(将选择添加到当前已选项目)
  • Remove - alt键(从当前已选项目中移除选择)
  • Invert - control键(移除选定项目并添加未选中项目)
/
NodifyEditor 实例 API
  • SelectArea
  • InvertSelection
  • UnselectArea
对齐
简介属性默认值
移动选中项目时对齐到何处GridCellSize1
自动校准位置EnableSnappingCorrectiontrue

EditorCommands类中可以看到以下RoutedUICommand

命令
简介属性默认值
相对于视口中心放大ZoomIn - CTRL +/
相对于视口中心缩小ZoomOut - CTRL -/
选择所有项目SelectAll - CTRL A
将视口移动到指定位置BringIntoView0,0
对齐方法:Top、Left、Bottom、Right、Middle、CenterAlignT
缩放并移动Viewport以显示尽可能多的项目FitToScreen /

 您可以在NodifyEditor实例上以编程方式调用这些命令的相应方法

  • FitToScreen
  • BringIntoView
  • ZoomAtPosition
  • ZoomIn
  • ZoomOut

2、节点容器 ItemContainer

项目容器(ItemContainer) 是编辑器中最重要的部分。它是一个内容控件,用于包装由 编辑器(NodifyEditor) 的 ItemsSource 生成的每个控件,并在图形坐标中具有 Location属性。

选择操作:鼠标左键点击并释放

选择
简介属性默认值
是否可选IsSelectabletrue
是否选中IsSelectedfalse
API

IsSelectableInArea

方法
是否可拖动IsDraggable true
通过释放右键取消拖拽操作AllowDraggingCancellation true

事件:

拖拽 ItemContainer 会触发一系列事件,这些事件由 NodifyEditor 处理并应用于所有选定的项:

  • DragStarted - 将 IsPreviewingLocation 依赖属性设置为 true;
  • DragDelta - 在拖拽操作完成或取消之前持续触发,并将所有选定项移动;
  • DragCompleted - 完成或取消拖拽操作,并将 Location 依赖属性设置为最终位置,IsPreviewingLocation 设置为 false

3、节点

节点是节点编辑器的基本组件。它们被包装在ItemContainer中,并且可以是任何自定义控件。

3.1、Node 控件 

节点的Header可以使用HeaderTemplate进行自定义,节点的Footer可以使用FooterTemplate进行自定义;Input集合中的每个项目可以使用InputConnectorTemplate进行自定义。同样,Output可以使用OutputConnectorTemplate进行自定义。

 3.2、GroupingNode 控件

这种类型的节点可以调整大小,如果通过Header拖动,它将移动其内部的节点。

如果按住SwitchMovementModeModifierKey(默认情况下为Shift键),它将移动而不会移动其子节点。

<nodify:NodifyEditor><nodify:NodifyEditor.ItemsSource><CompositeCollection><nodify:GroupingNode Header="Grouping node"Width="300"Height="250" />            <nodify:Node Header="My node" /><nodify:Node Header="My other node" /></CompositeCollection></nodify:NodifyEditor.ItemsSource>
</nodify:NodifyEditor>

节点的Header可以使用HeaderTemplate进行自定义。同样,节点的Content可以使用ContentTemplate进行自定义。

节点的大小可以通过更改ActualSize依赖属性的值来编程设置。

CanResizetrue
MovementModeGrouped

ResizeCompleted

命令 Command

ResizeStarted

命令 Command

3.3、KnotNode 控件

这种类型的控件可以用于重新排布(reroute)Connection,因为它只支持一个Connector

节点的Content可以使用ContentTemplate进行自定义。

<nodify:NodifyEditor><nodify:NodifyEditor.ItemsSource><CompositeCollection><nodify:KnotNode /></CompositeCollection></nodify:NodifyEditor.ItemsSource>
</nodify:NodifyEditor>

3.4 StateNode控件

 这种类型的节点本身就是一个Connector,这意味着它将在交互时引发PendingConnection事件。由于它继承自Connector,你需要将Anchor属性和IsConnected绑定到相应的状态。(如果IsConnected设置为false,连接将不会更新)

<nodify:NodifyEditor><nodify:NodifyEditor.ItemsSource><CompositeCollection><nodify:StateNode Content="My node" /></CompositeCollection></nodify:NodifyEditor.ItemsSource>
</nodify:NodifyEditor>

节点的Content可以使用ContentTemplate进行自定义。

 4、连接

连接是由两个点之间创建的。SourceTarget依赖属性是System.Windows.Point类型,通常绑定到连接器的Anchor点。

4.1、基本连接

库中所有连接的基类是BaseConnection,它派生自Shape。在创建自定义连接时,可以不受任何限值地从BaseConnection派生。

命令Command
DisconnectCommand 及 DisconnectEvent当按住ALT点击连接时触发
SplitCommand 及 SplitEvent当双击连接时触发

连接方向Direction有两种值:

  • Forward

imageimage

  • Backward

imageimage

 SourceOffsetTargetOffsetOffsetMode一起使用,会控制与锚点的距离:

 连接还有一个Spacing属性,会使连接在一段距离后转折到沿着从SourceTarget点的方向:

  • 有间距:

image

  • 无间距:

image

ArrowSize设置为"0, 0"会移除箭头。

 4.2、线连接

一条从SourceTarget的直线。

4.3、电路连接

 有一个Angle依赖属性来控制转折的位置。角度以度为单位。

4.4、曲线连接

 SourceTarget之间的贝塞尔曲线。

 5、连接器

连接器通过引发PendingConnectionStartedEvent事件来创建预备连接。连接器具有一个必须绑定的Anchor依赖属性,以便在节点位置更改时实时更新它们之间的连接。IsConnected依赖属性必须设置为true,以接收Anchor更新。

按住ALT并点击连接器会触发DisconnectionCommand

5.1、NodeInput和NodeOutPut

NodeInputNodeOutput是带有HeaderConnector的实现,可以通过自定义HeaderTemplate来显示文本或输入框。它们还公开了一个ConnectorTemplate来自定义连接器本身。通常,它们与Node.InputConnectorTemplateNode.OutputConnectorTemplate一起使用。

这篇关于第八节:Nodify 编辑器属性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100108

相关文章

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t