kanzi节点转换插件

背景:kanzi的节点如果选错了类型,想换一个类型,必须自己重新创建,把属性和绑定重新设置一遍,很麻烦。希望能一键变换节点类型。

1. 设计

2. 实现

我们选择创建kanzi的命令行插件,需要创建c#工程,继承类PluginCommand

创建过程需要参考帮助文档。

基类

c 复制代码
public abstract class BaseCopyNodeCommand : PluginCommand

子类

c 复制代码
public class CopyToEmptyNode2D : BaseCopyNodeCommand
{
    public override Type TargetNodeType => typeof(Rightware.Kanzi.Studio.PluginInterface.EmptyNode2D);

public class CopyToImage2D : BaseCopyNodeCommand
{
    public override Type TargetNodeType => typeof(Rightware.Kanzi.Studio.PluginInterface.Image2D);

public class CopyToTextBlock2D : BaseCopyNodeCommand
{
    public override Type TargetNodeType => typeof(Rightware.Kanzi.Studio.PluginInterface.TextBlock2D);

创建新节点

c 复制代码
string newName = item.Name + "_Copy";
                var newTargetNode = studio.ActiveProject.CreateProjectItem(
                    TargetNodeType, 
                    newName, 
                    parent);

递归复制节点及其所有子节点

c 复制代码
// 递归复制节点及其所有子节点
    protected void CopyNodeRecursively(ProjectItem sourceItem, ProjectItem targetItem)
    {
        // 复制源节点的属性和绑定
        CopyPropertiesAndBindings(sourceItem, targetItem);
        
        // 递归复制所有子节点
        CopyChildrenRecursively(sourceItem, targetItem);
    }

//复制属性和绑定
targetItem.Set(propertyName, sourceValue);
targetBindingHost.CreateBinding(binding);

删除源节点

c 复制代码
 // 删除源节点
item.Delete();

重命名新节点为原始名称

c 复制代码
// 重命名新节点为原始名称
newTargetNode.Set("Name", item.Name);

3. 使用

相关推荐
hez20109 小时前
.NET 11 Runtime Async 详解
c#·.net·.net core
猿长大人11 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
在世修行12 小时前
从零打造 C# 工业视觉检测系统(七):串口通信 SerialPort 封装与开发
开发语言·c#·modbus rtu·rs232/rs485
NoteStream17 小时前
【C语言基础】分支和循环(上)
c语言·开发语言·c++·经验分享·笔记·算法·c#
lzhdim19 小时前
C# 通过 Windows API 实现进程内存读写操作
开发语言·windows·c#
-银雾鸢尾-19 小时前
C#中的预处理指令
开发语言·c#
dalong1019 小时前
Savitzky-Golay 的C# 实现
开发语言·kotlin·c#
猿长大人20 小时前
C# | Autofac 新手指南:从零理解依赖注入与组件装配
c#·.net·di·依赖注入
show43320 小时前
多格式导出怎么做?2026免费小程序TXT/SRT实践
开发语言·小程序·c#
czhaii21 小时前
word插入表格排版创建或编辑应用技巧
ui·c#·xhtml