背景: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. 使用
