Edw*_*uay 20 c# wpf double-click event-handling
我可以像这样在TextBlock上单击一下:
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("you single-clicked");
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样双击 TextBlock:
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
if (e.ClickCount == 2)
{
MessageBox.Show("you double-clicked");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是如何在单个TextBlock上捕获它们并区分它们?
Nat*_*txo 12
您需要在点击序列结束后触发事件......这是什么时候?我建议使用计时器.MouseDown事件会重置它并增加点击次数.当计时器间隔过去时,它会调用以评估点击次数.
private System.Timers.Timer ClickTimer;
private int ClickCounter;
public MyView()
{
ClickTimer = new Timer(300);
ClickTimer.Elapsed += new ElapsedEventHandler(EvaluateClicks);
InitializeComponent();
}
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
ClickTimer.Stop();
ClickCounter++;
ClickTimer.Start();
}
private void EvaluateClicks(object source, ElapsedEventArgs e)
{
ClickTimer.Stop();
// Evaluate ClickCounter here
ClickCounter = 0;
}
Run Code Online (Sandbox Code Playgroud)
干杯!
如果您需要检测差异,我建议您使用这样的控件Label:
label.MouseDown += delegate(object sender, MouseEventArgs e)
{
if (e.ClickCount == 1)
{
// single click
}
};
label.MouseDoubleClick += delegate
{
// double click
};
Run Code Online (Sandbox Code Playgroud)
编辑:我的建议来自 MSDN 上的文档:
Control 类定义了 PreviewMouseDoubleClick 和 MouseDoubleClick 事件,但没有定义相应的单击事件。要查看用户是否单击了该控件一次,请处理 MouseDown 事件(或其对应事件之一)并检查 ClickCount 属性值是否为 1。
但是,即使用户单击,这样做也会给您一个单击通知。