Применить сочетания клавиш на странице Silverlight - PullRequest
0 голосов
/ 14 мая 2010

В заявке указано следующее. На дочерней странице Silverlight (Usercontrol, когда вы щелкаете по пункту меню) открывается страница, которая требует заполнения некоторых данных, затем для сохранения у нас есть кнопка Сохранить, чтобы отменить ее, у нас есть кнопка Отмена. Здесь я ищу для сохранения данных мне нужно использовать клавиши быстрого вызова (Ctrl + S). Если я напишу следующий код в событии KeyDown, это не будет работать хорошо, потому что Как правило, мы нажимаем клавишу «Ctrl» в режиме Presssed, а затем мы нажимаем клавишу «S» здесь, если я нажимаю клавишу «Ctrl» не отпускается, то он не работает .. В противном случае т.е. если нажать клавишу «Ctrl», отпустить ее, затем нажать «S», она работает нормально ..

// Код // int count = 0; - Global --- защищенное переопределение void OnKeyDown (KeyEventArgs e) { base.OnKeyDown (е);

        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 ]

4 голосов
/ 21 июня 2010

Используйте Keyboard.Modifiers, чтобы проверить состояние кнопки Ctrl. Грубый пример:

    if (e.Key == Key.S && Keyboard.Modifiers == ModifierKeys.Ctrl)
    {
        //MessageBox.Show("Saved");
        //Saving the data  
    };
0 голосов
/ 14 мая 2010

Следующий код работает нормально, но, похоже, событие вообще не будет запущено, если на странице нет элементов управления вводом, таких как текстовые поля и т. Д.

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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...