我想扩展(继承自)Telerik的RadTreeView
(Silverlight版本)控件。
让我们调用新控件MyTreeView
。
我想要实现的是,当在MyTreeView
中检查某个项目时,它会自动检查其所有子项目。此外,如果在检查节点后,其父节点已检查其所有子节点,我也想检查父节点。这将在整个树中递归到根。我似乎默认无法找到此功能。
我不需要用于检查项目的递归算法的解决方案,我可以自己轻松管理。我认为问题在于用户可以订阅Checked
和Unchecked
事件。因此,如果用户订阅了Checked
事件,则每当检查项目时,将检查其所有子项,从而为每个子节点引发一个事件,该事件由于检查其父项而自动检查。 在我的场景中,这不是一个理想的行为。我希望事件仅针对手动检查的项目触发,而不是针对任何其他将自动检查的节点。
我以为我可以覆盖OnChecked
方法,但它是私有的,或者没有这样的方法,所以我无法访问它。我可以在构造函数中向Checked
事件添加另一个事件处理程序,该事件处理程序将在任何其他事件处理程序订阅事件之前调用,但这不会阻止子节点引发事件。我希望能够暂时取消订阅Checked
上的处理程序,然后在检查节点后再次重新订阅它们。但是,由于我不知道谁订阅了一个事件,我无法手动取消订阅(事件是公开的),我似乎无法获得调用列表。
有没有办法迭代订阅的事件或任何其他方式暂时关闭它们?有没有更好的方法来解决所描述的问题?
答案 0 :(得分:1)
您可以使用RadTreeViewCheckEventArgs.IsUserInitiated
属性。