silverlight MouseLeftButtonDown事件无法触发

在给一个GridView控件添加MouseLeftButtonDown和MouseRightButtonDown事件时,MouseLeftButtonDown事件触发触发不了。

参考:http://www.cnblogs.com/tianguook/archive/2011/05/13/2045299.html

原因如下:

  控件在捕获了MouseLeftButtonDown事件后,会将该事件的“Handled”设置为“True”。而在在事件路由中,当某个控件得到一个RoutedEvent,会检测Handled属性,当Handled属性为True时,则忽略该事件。

解决办法:

      用UIElement.AddHandler 方法 (RoutedEvent, Delegate, Boolean) 。该方法中有一参数handledEventsToo ,类型System.Boolean,如果该参数为True,即使路由事件在其事件数据中标记为已处理(Handled 为 True),也会调用事件处理程序。如果为False,标记为已处理(Handled 为 True),不会再调用事件处理程序,默认为False。

     private void grdCamera_RowLoaded(object sender, RowLoadedEventArgs e)
        {
            GridViewRowItem rowItem = e.Row as GridViewRowItem;
            if (rowItem != null)
            {
                //给Grid的行绑定右键单击事件
                rowItem.MouseRightButtonDown += new MouseButtonEventHandler((ss, ee) =>
                {
                    GridViewRowItem item = ss as GridViewRowItem;
                    if (item != null && item.Item != null)
                    {
                        //选中当前行
                        item.IsSelected = true;
                    }
                });
                //给Grid的行绑定左击键单击事件
                rowItem.AddHandler(GridViewRowItem.MouseLeftButtonDownEvent, new MouseButtonEventHandler(this.rowItem_MouseLeftButtonDown), true);
            }
        }

        void rowItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            GridViewRowItem item = sender as GridViewRowItem;
            if (item != null && item.Item != null)
            {
                //empty
            }
        }

 

 

posted @ 2012-11-09 23:27  简、单  阅读(526)  评论(0编辑  收藏  举报