1

RadTreeView我想扩展(继承自)这个 Telerik 的(Silverlight 版本)控件。我们称之为新控件MyTreeView

我想要实现的是,当一个项目被签入时MyTreeView,它会自动检查它的所有子项目。另外,如果在检查节点后,它的父节点检查了它的所有子节点,我也想检查父节点。这将在整个树中递归到根。默认情况下我似乎无法找到此功能。

我不需要用于检查项目的递归算法的解决方案,我可以自己轻松管理。我认为一个问题是用户可以订阅CheckedUnchecked事件。因此,如果用户订阅了一个Checked事件,则无论何时检查一个项目,它的所有子节点都将被检查,从而为每个子节点引发一个事件,该事件是由于检查其父节点而自动检查的。在我的情况下,这不是一个理想的行为。我希望该事件仅针对手动检查的 item触发,而不是针对任何其他将因此自动检查的节点。

我以为我可以重写该OnChecked方法,但它要么是私有的,要么没有这样的方法,所以我无权访问它。我可以在构造函数中为事件添加另一个事件处理程序,该事件处理程序Checked将在任何其他事件处理程序订阅事件之前被调用,但这不会阻止子节点引发事件。我希望能够Checked暂时取消订阅处理程序,然后在检查节点后再次重新订阅它们。但是,由于我不知道谁订阅了某个事件,所以我无法手动取消订阅(该事件是公开的),而且我似乎无法获取调用列表。

有没有办法遍历订阅的事件或任何其他方式来暂时关闭它们?有没有更好的方法来解决所描述的问题?

4

1 回答 1

1

有一个RadTreeViewCheckEventArgs.IsUserInitiated属性可以使用。

于 2011-08-22T12:59:04.860 回答