WPF правильный способ установить bool при нажатой клавише - PullRequest
0 голосов
/ 27 марта 2011

I WPF Мне нужно установить логическую переменную (и дополнительно выполнить некоторые другие действия), пока нажата клавиша.Т.е. для установки на клавишу нажимают, а для сброса на клавишу отпускают.Что-то, что я могу сделать, используя только обработчики событий:

this.KeyDown += new KeyEventHandler(MyModuleView_KeyDown);
this.KeyUp += new KeyEventHandler(MyModuleView_KeyUp);

bool MyFlag = false;

void MyModuleView_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == System.Windows.Input.Key.Space)
        {
            MyFlag = false;
            ...
        }

    }

    void MyModuleView_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == System.Windows.Input.Key.Space)
        {
            MyFlag = true;
            ...
        }
    }

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

private static RoutedUICommand mymode;

InputGestureCollection inputs = new InputGestureCollection();
        inputs.Add(new KeyGesture(Key.Space, "Space"));
        mymode = new RoutedUICommand("MyMode", "MyMode", typeof(InterfaceCommands), inputs);
public static RoutedUICommand MyMode
{
    get { return mymode; }
}
...
private void MyModeCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
    MyFlag = true;
    ...
}

Как правильноотслеживать состояние клавиши в WPF для включения чего-либо (например, режим выбора курсора) при при нажатии клавиши?

Ответы [ 2 ]

2 голосов
/ 27 марта 2011

Команды вам здесь не помогут, ваш подход к событиям - верный путь.Если вам не нравится выделение кода, вы можете создать собственное присоединенное свойство, которое будет отвечать за привязку событий.

0 голосов
/ 27 марта 2011

Взгляните на библиотеку AttachedCommandBehavior и предоставленные примеры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...