ITPub博客

首页 > Linux操作系统 > Linux操作系统 > sliverlight简单方法实现双击触发

sliverlight简单方法实现双击触发

原创 Linux操作系统 作者:张国平 时间:2010-03-14 15:41:29 0 删除 编辑

sliverlight本身没有提供DoubleClick,如果实现可以在网上找到很多实现发方法,

我试了几个,这边这个算是最简单的,不过对于button这种已经绑定了click触发器总是有问题,

对于其他所有控件都可以正常使用,只要绑定了MouseLeftButtonDown和MouseLeftButtonUp这两个触发器就OK了

实现原理很简单,记录MouseLeftButtonUp和MouseLeftButtonDown的时间戳,计算时间差,只要小于1/10秒就可以,大于0就算双击,就是双击中第一次点击和第二次点击时间差小于1/10秒。

实现代码:

    public class GraphicsUtils
    {
        #region Double click

        ///


        /// Holds the millis for the first click.
        ///

        private long lastClickedTime = 0;

        ///


        /// Delegate definition for the call back function.
        ///

        ///
        ///
        public delegate void DoubleClickHandler(object sender, MouseButtonEventArgs e);

        ///


        /// Holder for the call back function.
        ///

        private DoubleClickHandler doubleClickCallBackFunction;
        ///
        /// This will attach a double click to an object.
        ///

        ///
        /// Due to Silverlight lack of double click event a custom implementation is needed.
        /// this function and its adjacent handlers will attach a double click event to any object
        /// deriving from UIElement.
        ///

        /// the UIElement to attach the event to.
        /// the function to call upon the double click event.
        public void AttachDoubleClick(object doubleClickTarget, DoubleClickHandler function)
        {
            UIElement target = (UIElement)doubleClickTarget;
            target.MouseLeftButtonUp += new MouseButtonEventHandler(target_MouseLeftButtonUp);
            target.MouseLeftButtonDown += new MouseButtonEventHandler(target_MouseLeftButtonDown);
            doubleClickCallBackFunction = function;
        }

        private void target_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            lastClickedTime = DateTime.Now.Ticks / 10000;
        }

        private void target_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            long currentMillis = DateTime.Now.Ticks / 10000;

            if (currentMillis - lastClickedTime < 100 && currentMillis - lastClickedTime > 0)
            {
                //HERE IS DOUBLE CLICK
                doubleClickCallBackFunction(sender, e);
            }

        }

        #endregion
    }

使用方法,比如里面有个椭圆,名称是doubleclick,那么绑定方法如下:

    GraphicsUtils.DoubleClickHandler dblClickHandler = new GraphicsUtils.DoubleClickHandler(MyMethodToHandleDoubleClick);
            GraphicsUtils gu = new GraphicsUtils();
            gu.AttachDoubleClick(this.doubleclick, dblClickHandler);

MyMethodToHandleDoubleClick是双击触发的事件,很简单,就和click事件一样写、

这个可以放在页面初始化时候进行绑定,是一个比较方便简单的方法,

原载与

http://shemesh.wordpress.com/2009/03/05/silverlight-attach-a-double-click-to-any-object/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22259926/viewspace-629453/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
SAP 金融风险管理产品专家

注册时间:2009-08-05

  • 博文量
    229
  • 访问量
    636037