WPF在按下键时设置bool的正确方法

时间:2011-03-27 13:07:46

标签: c# wpf silverlight keyboard

我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 个答案:

答案 0 :(得分:2)

命令对你没有帮助,你对事件的处理是一种正确的方法。如果你不喜欢有代码隐藏 - 你可以创建一个自定义附加属性,它将负责事件的连接。

答案 1 :(得分:0)

查看AttachedCommandBehavior library和提供的示例