0

当 ClickMode 为 'Hover' 时,如何在 RepeatButton 上设置初始延迟(在触发第一次单击事件之前)?

4

1 回答 1

1

查看 Reflector 中的代码,如果 ClickMode 设置为 Hover,ButtonBase 从 OnMouseEnter 调用 OnClick,因此您无法设置任何内容来阻止初始点击。如果在 OnMouseEnter 期间进行了 OnClick 调用,您可以继承 RepeatButton 并尝试完全抑制它:

public class DelayRepeatButton
    : RepeatButton
{
    private bool duringMouseEnter = false;

    protected override void OnMouseEnter(MouseEventArgs e)
    {
        try
        {
            duringMouseEnter = true;
            base.OnMouseEnter(e);
        }
        finally
        {
            duringMouseEnter = false;
        }
    }

    protected override void OnClick()
    {
        if (!duringMouseEnter)
        {
            base.OnClick();
        }
    }
}

如果您希望它适用于其他 ClickMode 值,您可以对 OnKeyDown、OnKeyUp、OnLeftMouseButtonDown 和 OnLeftMouseButtonUp 执行类似的操作。

于 2010-08-14T13:30:37.373 回答