将快捷键应用于Silverlight页面

时间:2010-05-14 10:32:36

标签: silverlight

在申请要求如下..    在Silverlight子页面(Usercontrol,当你单击菜单项)打开页面时,它需要填充一些数据然后保存我们有保存按钮取消它我们有取消按钮。   在这里,我正在寻找保存数据,我需要使用快捷键(Ctrl + S)。 如果我在KeyDown事件中编写以下代码,那么它的运行效果不佳,因为 通常我们在“按下”模式下按“Ctrl”键,然后按“S”键  在这里,如果我按下'Ctrl'键没有被释放然后它不工作.. 否则即。如果按“Ctrl”键然后释放它然后打“S”它工作正常..

//代码 // int count = 0; - 全球--- protected override void OnKeyDown(KeyEventArgs e)         {             base.OnKeyDown(E);

        if (e.Key == Key.Ctrl)
        {
            count = 1;

        }
        string str = e.Key.ToString();
        if (count >0 && str == "S")
        {
            //MessageBox.Show("Saved");
            //Saving the data  
            count = 0;
        }

    }

我正在寻找它的作用 “Ctrl”键处于按下模式

请看一下......

由于

2 个答案:

答案 0 :(得分:4)

使用Keyboard.Modifiers检查Ctrl按钮状态。粗略的例子:

    if (e.Key == Key.S && Keyboard.Modifiers == ModifierKeys.Ctrl)
    {
        //MessageBox.Show("Saved");
        //Saving the data  
    };

答案 1 :(得分:0)

以下代码似乎工作正常,但似乎除非页面上有输入控件(例如文本框等),否则事件不会被触发。

public partial class MainPage : UserControl
{
    private bool _CtrlPressed;

    public MainPage()
    {
        InitializeComponent();

        LayoutRoot.KeyDown += new KeyEventHandler(LayoutRoot_KeyDown);
        LayoutRoot.KeyUp += new KeyEventHandler(LayoutRoot_KeyUp);
    }

    void LayoutRoot_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Ctrl)
            _CtrlPressed = true;
    }

    void LayoutRoot_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Ctrl)
            _CtrlPressed = false;

        if (e.Key == Key.S && _CtrlPressed)
        {
            Debug.WriteLine("Ctrl + S was pressed");
            //Execute save operation
        }
    }
}