Silverlight点击事件在第一个事件完成之前第二次注册

时间:2009-06-10 20:34:04

标签: silverlight events user-interface

我有一个启动“模态对话框”的按钮 - 它只是创建一个覆盖所有内容的透明网格,并在其上创建“对话框”。

但是我有一个奇怪的问题 - 如果我快速双击/三击按钮(或在事件代码中添加一些延迟),按钮点击事件会多次执行,创建多个重叠模式对话框。如果我的事件中的第一个动作是禁用按钮(IsEnabled = false),它似乎阻止了这一点。

我的猜测是Silverlight正在进行多线程输入 - 它不仅记录了另一个线程中的第二次点击(当按钮的点击事件正在运行时),而是通过评估哪个控件应该是目标之前的跳跃上一个事件已经完成执行。即使该事件改变了那些鼠标坐标的控制,也没关系。

有没有人知道这个行为,或者解决这个问题?如果我有一个类似保存窗口的东西,用户点击一个保存按钮,阻止网格(“保存...”)会在保存时放置,然后整个“窗口”关闭,我想避免用户排队多次保存事件点击(这可能导致不可预测的程序行为)。

2 个答案:

答案 0 :(得分:2)

如果您曾经使用过WinForms或WPF,这是预期的行为。您的按钮正在播放其Click事件,直到您的模态对话框覆盖它。不幸的是,在第一次点击和模态对话框覆盖按钮之间有一段时间,允许多次点击原始按钮。

您有两种解决方案选择:

  1. 首次单击后禁用该按钮,然后在模式对话框返回后重新启用。你已经提到过这个有用了。

  2. 在按钮的事件处理程序中编写代码,以确定是否已显示模式对话框。这样,您将责任放在一个位置而不是将其拆分(禁用并重新启用按钮)。这将是我的首选解决方案。

答案 1 :(得分:0)

我认为你所看到的是Silverlight's routed events的行为。

您可以将事件参数的Handled属性设置为true,以防止事件冒泡。

相关问题