Skip to content
miroiu edited this page Jun 22, 2024 · 1 revision

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

以下是库中包含的节点:

1. Node 控件

这种类型的节点支持InputOutput连接器,可以随意移动。

<nodify:NodifyEditor xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <nodify:NodifyEditor.ItemsSource>
    <CompositeCollection>
        <nodify:Node Header="My Node">
            <nodify:Node.Input>
                <CompositeCollection>
                    <sys:String>In 0</sys:String>
                    <sys:String>In 1</sys:String>
                </CompositeCollection>
            </nodify:Node.Input>
            <nodify:Node.Output>
                <CompositeCollection>
                    <sys:String>Out 0</sys:String>
                    <sys:String>Out 1</sys:String>
                </CompositeCollection>
            </nodify:Node.Output>
            <nodify:Node.InputConnectorTemplate>
                <DataTemplate>
                    <nodify:NodeInput Header="{Binding}" />
                </DataTemplate>
            </nodify:Node.InputConnectorTemplate>
            <nodify:Node.OutputConnectorTemplate>
                <DataTemplate>
                    <nodify:NodeOutput Header="{Binding}" />
                </DataTemplate>
            </nodify:Node.OutputConnectorTemplate>
        </nodify:Node>
    </CompositeCollection>
  </nodify:NodifyEditor.ItemsSource>
</nodify:NodifyEditor>

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

Input集合中的每个项目可以使用InputConnectorTemplate进行自定义。同样,Output可以使用OutputConnectorTemplate进行自定义。

Node

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依赖属性的值来编程设置。

默认值

  • CanResize: true
  • MovementMode: Grouped

命令

  • ResizeCompleted
  • ResizeStarted

Grouping Node

3. KnotNode 控件

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

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

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

Knot Node

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进行自定义。

State Node