Winforms 如何更改Telerik winform树视图上的展开/折叠图标?

Winforms 如何更改Telerik winform树视图上的展开/折叠图标?,winforms,treeview,icons,telerik,expand,Winforms,Treeview,Icons,Telerik,Expand,我正在尝试自定义Telerik Winform TreeView控件上的展开/折叠图标 如果我用PropertyBuilder填充TreeView控件,我可以看到Telerik.WinControls.UI.ExpandCollapseElements,我可以修改这些元素以更改展开/折叠图标。但是,我希望动态填充我的树 我已经检查过修改主题,但在视觉样式生成器中没有看到ExpandCollapseElements,也没有看到在对象模型的RadTreeView端修改这些图标的任何方法 截图上说这是

我正在尝试自定义Telerik Winform TreeView控件上的展开/折叠图标

如果我用PropertyBuilder填充TreeView控件,我可以看到Telerik.WinControls.UI.ExpandCollapseElements,我可以修改这些元素以更改展开/折叠图标。但是,我希望动态填充我的树

我已经检查过修改主题,但在视觉样式生成器中没有看到ExpandCollapseElements,也没有看到在对象模型的RadTreeView端修改这些图标的任何方法


截图上说这是可以做到的,但我遗漏了什么

创建节点时,可以直接设置展开/折叠图标。例如:

Image imageToUseForExpand   = /* get this image from somewhere */;
Image imageToUseForCollapse = /* get this image from somewhere */;

RadTreeNode item = new RadTreeNode("Node with custom icons");

//NOTE: You need to add the node to the treeview before working
//      with the TreeViewElement property (otherwise it will be null)
radTreeView1.Nodes.Add(item);

//Set the expand and collapse images to whatever you want
item.TreeViewElement.ExpandImage = imageToUseForExpand;
item.TreeViewElement.CollapseImage = imageToUseForCollapse;
或者,如果您希望更一般地进行格式化(不需要每次创建节点时都指定图像),则可以如下处理节点格式化事件:

//Either register the even in code (like this) or via the Designer
radTreeView1.NodeFormatting += radTreeView1_NodeFormatting;

//Then in the event handler, set the appropriate image
private void radTreeView1_NodeFormatting(object sender, 
                                         TreeNodeFormattingEventArgs e)
{
    //See whether the node is currently expanded and set the image accordingly
    if (e.Node.Expanded)
        e.NodeElement.ExpanderElement.SignImage = imageToUseForExpand;
    else
        e.NodeElement.ExpanderElement.SignImage = imageToUseForCollapse;
}

注意:我认为nodeformating事件相对较新,因此您需要使用最新版本的Telerik。如果此代码有问题,请确保运行的是最新版本的控件。

要全局更改展开和折叠图像,请执行以下操作:

Image imageToUseForExpand   = /* get this image from somewhere */;
Image imageToUseForCollapse = /* get this image from somewhere */;

radTreeView1.TreeViewElement.ExpandImage = imageToUseForExpand;
radTreeView1.TreeViewElement.CollapseImage = imageToUseForCollapse;

最后,我将使用的主题保存为XML,手动编辑该主题的XML,重新导入XML并将其保存为.tssp。我很幸运,我想要的形象是另一个主题的一部分

这种方法在我的情况下可能效果最好,因为我们需要主题支持,以便在我们支持的所有平台上都能让事情看起来很好


其他建议的方法看起来不错;我没有试过任何一个。

当您说要动态填充树时,是否要展开/折叠图标以使不同行的图标不同?或者您只是计划通过代码添加节点,但所有节点都可以有相同的图标?