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. 使用

相关推荐
曹牧3 小时前
C# WinForms应用程序中展示JSON内容
c#
真鬼1234 小时前
.Net 6.0快速下载
c#
雪豹阿伟5 小时前
6.C# —— 类与对象、数据类型、方法详解
c#·上位机
伽蓝_游戏8 小时前
第二章:深入 Unity 资源导入管线 (Asset Import Pipeline)
游戏·unity·c#·游戏引擎·游戏程序
爱炸薯条的小朋友9 小时前
全局锁的性能优势,以及链路优化为何常常低于预期——基于 `MatPoolsTest` 中小图池与大图池的实战复盘
opencv·算法·c#
心蓝无敌11 小时前
攻克Avalonia Dock布局中WebView等原生控件无法停靠的难题
c#·visual studio·avalonia·avalonia dock
guygg8812 小时前
C# 监听数据库数据变化(SqlDependency 实现)
数据库·oracle·c#
爱炸薯条的小朋友15 小时前
C#由窗体原子表溢出造成的软件闪退,根本原因补充
开发语言·c#·wpf
我是苏苏16 小时前
C#基础:Winform桌面开发中自定义组件UI、属性及事件
服务器·数据库·c#
2401_8530878816 小时前
Confluence 替代落地复盘:存量数据迁移、权限重构、信创适配踩坑总结
开发语言·重构·c#