自动生成自定义TreeViewItem的名称

3
我有一个从TreeViewItem(自定义TreeViewItem)派生的类,它被用于从TreeView(自定义TreeView控件)派生的类中。
当我的控件的用户使用默认的设计时集合编辑器向我的自定义TreeView添加项目时,我希望新添加的项目具有默认名称(例如MyNode1,MyNode2等),并且我希望这些名称写在XAML中。
有任何关于如何实现这一点的想法吗?
我注意到当你从工具箱放置一个控件时,它会分配一个默认名称。如果可能的话,我想重用Visual Studio 2010中现有的机制来为我的树节点类命名。

1
这肯定不是你需要的答案,但似乎很困难。这可能意味着某种能够为您编写名称属性的VS插件。顺便问一下,为什么您需要在每个节点中都需要名称? - NestorArturo
在Blend中,有一个“创建交互元素时自动命名”的选项,但我认为Visual Studio没有相应的选项。[链接](http://msdn.microsoft.com/en-us/library/gg413373.aspx#ExpressionBlend) - theartwebreathe
为什么?如果您根据节点名称对节点进行不同的处理,则应在创建节点时花时间指定ID或其他标识符。 - Rachel
嗯,我正在编写一个自定义控件,希望我的用户能够通过名称从代码中访问每个节点(就像在Windows表单中一样)。此外,我需要能够导入/导出树的内容...这就是复杂的地方,因为我需要在每个节点中导出复杂的数据,并且唯一可靠的重新导入方式是如果我有所有节点的名称。ID也可以,但那也必须是控件XAML印记的一部分,就像名称一样。 - Rayden
1个回答

1

TreeViewTreeViewItem是用户界面控件,不应用于存储任何需要保存的信息。相反,您应该创建一个分层数据类型来存储您的信息,将其绑定到TreeView.ItemsSource属性,并提供一个HierarchicalDataTemplate以按您希望的方式显示数据。

这样,您可以通过简单地向视图模型或代码后台中的绑定集合添加新的数据类型对象来向TreeView添加新项。在将它们添加到集合之前,您可以为对象分配任何值,并且它们都可以随时从集合中访问。


在一般的应用程序中,这是正确的。然而,我面临的问题是编写一个自定义控件,它看起来像一个树形视图,但具有额外的复杂功能。该功能依赖于我框架中的其他项目。目标是我的控件的用户只需将其拖放到页面上,设置一些属性,它就应该工作。如果他需要做更高级的操作,那么他也可以编写一些代码,但大多数情况下,仅仅通过编辑XAML/使用编辑器就足够了。他不必担心复杂的细节,如HDT或数据模型。 - Rayden
你确定需要对 TreeView 进行子类化吗?使用 附加属性 可以做出惊人的效果。如果您感兴趣,可以查看此 MSDN 文章 - Sheridan
从概念上讲,我不需要附加属性,因为我正在开发一个基于树视图的新控件,所以我也想保持旧控件的默认状态。 - Rayden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,