Проверьте состояние кнопки для всех кнопок мыши - PullRequest
5 голосов
/ 13 февраля 2011

Есть ли лучший способ проверить состояние кнопок для всех кнопок мыши, чем проверять наличие дополнительных кнопок?

var mouseEventArgs = (System.Windows.Input.MouseEventArgs)e.StagingItem.Input;

if (mouseEventArgs.LeftButton == MouseButtonState.Released &&
    mouseEventArgs.MiddleButton == MouseButtonState.Released &&
    mouseEventArgs.RightButton == MouseButtonState.Released &&
    mouseEventArgs.XButton1 == MouseButtonState.Released &&
    mouseEventArgs.XButton2 == MouseButtonState.Released)
{
    return;
}

Если нет, как я могу сделать это более элегантно, не повторяя себя так много?

Заранее спасибо!

Ответы [ 2 ]

7 голосов
/ 13 февраля 2011

Я не думаю, что вы можете сделать что-то еще, кроме рефакторинга этого метода, так как нет предопределенной коллекции для всех кнопок.Если вы хотите полностью скрыть его из виду, вы можете использовать такой метод расширения, как этот:

public static class Extensions
{
    public static bool CheckUniformButtonState(this MouseButtonEventArgs e, MouseButtonState state)
    {
        switch (state)
        {
            case MouseButtonState.Pressed:
                return (e.LeftButton == MouseButtonState.Pressed &&
                    e.RightButton == MouseButtonState.Pressed &&
                    e.MiddleButton == MouseButtonState.Pressed &&
                    e.XButton1 == MouseButtonState.Pressed &&
                    e.XButton2 == MouseButtonState.Pressed);
            case MouseButtonState.Released:
                return (e.LeftButton == MouseButtonState.Released &&
                    e.RightButton == MouseButtonState.Released &&
                    e.MiddleButton == MouseButtonState.Released &&
                    e.XButton1 == MouseButtonState.Released &&
                    e.XButton2 == MouseButtonState.Released);
            default:
                return false;
        }
    }
}

(Не то, чтобы кто-нибудь когда-либо проверял, нажаты ли все 5 кнопок ..)

Тогда выможно проверить так:

if (mouseEventArgs.CheckUniformButtonState(MouseButtonState.Released))
{
    return;
}
2 голосов
/ 13 февраля 2011
var buttonStates = new [] {
     mouseEventArgs.LeftButton, 
     mouseEventArgs.MiddleButton,
     mouseEventArgs.RightButton,
     mouseEventArgs.XButton1,
     mouseEventArgs.XButton2};

if (buttonStates.All(s => s == MouseButtonState.Released))
{
     return;
}
...