Attach a double click to an object
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace AutoCompleteListBuilder
{
public class GraphicsUtils
{
#region Double click
/// <summary>
/// Holds the millis for the first click.
/// </summary>
private long lastClickedTime = 0;
/// <summary>
/// Delegate definition for the call back function.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public delegate void DoubleClickHandler(object sender, MouseButtonEventArgs e);
/// <summary>
/// Holder for the call back function.
/// </summary>
private DoubleClickHandler doubleClickCallBackFunction;
/// <summary>
/// This will attach a double click to an object.
/// </summary>
/// <remarks>
/// 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.
/// </remarks>
/// <param name="doubleClickSender">the UIElement to attach the event to.</param>
/// <param name="function">the function to call upon the double click event.</param>
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)
{
doubleClickCallBackFunction(sender, e);
}
}
#endregion
}
}
Related examples in the same category