0

ClickModeが'Hover'の場合、(最初のクリックイベントが発生する前に)RepeatButtonに初期遅延を設定するにはどうすればよいですか?

4

1 に答える 1

1

Reflectorのコードを見ると、ClickModeがHoverに設定されている場合、ButtonBaseはOnMouseEnterからOnClickを呼び出すため、最初のクリックを防ぐために設定できるものはありません。OnMouseEnter中に行われた場合は、RepeatButtonをサブクラス化し、OnClick呼び出しを完全に抑制しようとすることができます。

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 に答える