Начальная задержка WPF на RepeatButton - PullRequest
0 голосов
/ 14 августа 2010

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

1 Ответ

1 голос
/ 14 августа 2010

Глядя на код в 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.

...