如何防止按钮内的WPF复选框被双击检查?

时间:2013-08-09 22:01:33

标签: wpf

我有一个WPF按钮,其内容包含一系列控件,包括CheckBox。

目前单击CheckBox会触发“Checked”事件,没关系。

我不喜欢的是Double-Click也会触发“Checked”事件。

目前,Double-Click会触发CheckBox的“Checked”事件和Button的“DoubleClicked”事件。

我想要的是双击CheckBox应该只触发Button的事件,而不是CheckBox的事件。只应在单击时检查CheckBox。

有办法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您尝试做的事情可能无法获得最佳用户体验,因为在处理用户尝试选中此框之前,您必须实施延迟。

为什么?

好吧,如果你双击复选框,你不希望复选框发生任何事情,你只想将控制权传递给按钮。这完全可以理解。

但是如果你只是点击复选框会发生什么?在您释放鼠标按钮的那一刻,您将看到出现复选标记。但系统还不知道您不打算再次点击。因此,它必须等待DoubleClickTime以确定您实际上从未双击过。

你必须权衡哪个更糟:双击复选框时勾选复选框与闪烁的延迟。

如果您决定延迟,您需要自己实施。这是一个应该有效的基本程序:

  1. 为CheckBox.PreviewMouseDown创建一个处理程序。在此处理程序中,禁用CheckBox并以DispatcherTimer的间隔启动DoubleClickTime
  2. 同时,为Button.MouseDoubleClick创建一个处理程序,将字段_hasDoubleClicked设置为true。
  3. 当计时器关闭时,启用复选框,如果_hasDoubleClicked为false,则切换复选框的IsChecked。另外,设置_hasDoubleClick = false
  4. 正如你所看到的,这并不漂亮。您可能想问自己是否有其他方法可以通过不同的设计实现您的目标。您是否需要首先使用双击?