RepeatButton上的WPF初始延迟

时间:2010-08-14 12:38:39

标签: wpf repeatbutton

当ClickMode为“悬停”时,如何在RepeatButton上设置初始延迟(触发第一次点击事件之前)?

1 个答案:

答案 0 :(得分:1)

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

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执行类似操作。