【发布时间】:2011-10-15 20:12:58
【问题描述】:
我想扩展(继承自)这个 Telerik 的 RadTreeView(Silverlight 版本)控件。
我们将新控件称为MyTreeView。
我想要实现的是,当在MyTreeView 中签入一个项目时,它会自动检查其所有子项目。另外,如果在检查了它的父节点后检查了它的所有子节点,我也想检查父节点。这将在整个树中递归到根。默认情况下我似乎无法找到此功能。
我不需要用于检查项目的递归算法的解决方案,我可以自己轻松管理。我认为一个问题是用户可以订阅Checked 和Unchecked 事件。因此,如果用户订阅了Checked 事件,则每当检查项目时,将检查其所有子节点,从而为每个子节点引发一个事件,该事件因检查其父节点而自动检查。 在我的情况下,这不是一个理想的行为。我希望事件仅针对手动检查的项目触发,而不是针对任何其他将因此自动检查的节点。
我以为我可以覆盖 OnChecked 方法,但它要么是私有的,要么没有这样的方法,所以我无权访问它。我可以在构造函数中向Checked 事件添加另一个事件处理程序,该事件处理程序将在任何其他事件处理程序订阅事件之前被调用,但这不会阻止子节点引发事件。我希望能够暂时取消订阅Checked 上的处理程序,然后在检查节点后再次重新订阅它们。但是,由于我不知道谁订阅了某个事件,所以无法手动取消订阅(该事件是公开的),而且我似乎无法获取调用列表。
有没有办法遍历订阅的事件或任何其他方式暂时关闭它们?有没有更好的方法来解决所描述的问题?
【问题讨论】:
标签: c# telerik custom-controls checked radtreeview