syuko

Just For Fun。生存,社会秩序,娱乐
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

RadTreeViewItem - event MouseLeftButtonDown or Up never fires

Posted on 2011-03-18 15:25  syuko  阅读(981)  评论(5编辑  收藏  举报

这是借用TeleriK官网论坛上的帖子名字。由于自己也碰到了这个问题,当时也是看了官方的回复才解决的。废话不多说直接说应用场景和解决方案。

应用场景:需要在RadTreeView实现点击节点响应事件,并且当前节点处于Selected状态下点击仍然能触发响应事件。

  (原文:I bound the RadTreeViewItem.MouseLeftButtonDown to an event handler in code, but in debug I noticed the event never fires. I didn't use the RadTreeViewItem.Selected event because when a the item is selected, when use click the item again the Selected event don't fire - this is not I want, so I have to handle the MouseLeftButtonDown or Up events but... the two events never fire. Help!)

解决方案:通常情况下会使用RadTreeView的SelectionChanged事件,但该时间只有在改变当前选中节点的时候才能触发,并且设置节点的IsSelected=true时也会被触发(这个点在做节点定位的时候非常不方便,定位到节点后设置节点的IsSelected=true时会触发SelectionChanged),所以SelectionChanged事件在这个场景里不适用。

  在项目中习惯性的使用MouseLeftButtonDown事件发现竟然不触发,这点很无语呀。

  看了Telerik官方的回复发现官方使用MouseLeftButtonUp事件来处理这个场景。Telerik没解释为什么用Up事件而不是Down事件,有可能Telerik在实现控件的时候没有去获取当前节点,只是在Up事件的时候才去获取。

  代码:

private void TreeViewRoot_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            ObjTreeNodeClass oNodeEnt = TreeViewRoot.SelectedItem as ObjTreeNodeClass;
            if (null == oNodeEnt)
            {
                return;
            }

            //处理逻辑

       }

  

  对这个处理方式真是很无语,没办法是用别人的控件就得遵守别人的规则,不管别人的规则有时是多么的别扭。