Начальная задержка WPF на RepeatButton

Как я могу установить начальную задержку для RepeatButton(до того, как будет запущено событие первого нажатия), когда ClickMode имеет значение "Hover"?

1 ответ

Решение

Глядя на код в Reflector, ButtonBase вызывает OnClick из OnMouseEnter, если для ClickMode установлено значение Hover, поэтому вы не можете установить ничего, что могло бы предотвратить этот первоначальный щелчок. Вы можете создать подкласс 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.

Другие вопросы по тегам