link1234 Ответов: 1

Как изменить функцию клавиатуры?


Привет. У меня есть одно древовидное представление, один Медиа-элемент и одна пользовательская вкладка меню в моей программе WPF.
Я хочу, чтобы моя клавиатура имела разные функции в каждом из них. Например, клавиши вверх и вниз в древовидном представлении должны перемещаться между элементами, а в элементе мультимедиа-управлять громкостью. В другом мире я хочу, чтобы при нажатии пользователем на каждую вкладку функция клавиатуры менялась?
Я использую этот код правильно, но я не могу правильно управлять программой с помощью этого. например, если я нажму клавишу вниз, программа сначала изменит элемент treeview, а затем изменит valume.

Что я уже пробовал:

private void Window_KeyDown(object sender, KeyEventArgs e)
       {
           switch (e.Key)
           {
               case Key.Space: PlayPause(); break;
               case Key.Enter: FullScreenFunction(); break;
               case Key.Up: VolumeBar.Value = VolumeBar.Value + 0.01; break;
               case Key.Down: VolumeBar.Value = VolumeBar.Value - 0.01; break;
               case Key.Right: mediaPlayer.Position = TimeSpan.FromSeconds(VideoPosBar.Value + 5); break;
               case Key.Left: mediaPlayer.Position = TimeSpan.FromSeconds(VideoPosBar.Value - 5); break;
               case Key.M: MuteSoundfunction(); break;
           }
       }

1 Ответов

Рейтинг:
1

Richard MacCutchan

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

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (inTreeView) // set this value somewhere to know which cases to use
    {
        switch (e.Key)
        {
        // cases for moving between tree items
        }
    }
    else
    {
        switch (e.Key)
        {
        // cases for volume controls
        }
    }
}


link1234

Спасибо. Но что я должен написать в теле if, чтобы проверить, нажимает ли пользователь на элемент treeview или media?

Richard MacCutchan

Я понятия не имею. Это ваше приложение, поэтому вы знаете, что пользователь пытается сделать в любой момент.

link1234

на данный момент, когда я выбираю элемент в treeview, а затем нажимаю на кнопку воспроизведения с помощью мыши, управление переходит к кнопке воспроизведения, и клавиша со стрелкой работает правильно для изменения громкости. Но когда я нажимаю пробел для запуска видео, видео запускается, но элемент управления остается в treeview, поэтому клавиша со стрелкой работает неправильно. как передать элемент управления из treeview в кнопку или окно после нажатия кнопки space или enter?

Richard MacCutchan

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

link1234

Теперь я нахожу свой ответ с помощью поиска фокусного слова. спасибо.

link1234

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