tool__ Ответов: 2

Скрыть картинку с помощью клавиатуры в WPF


В приведенной ниже программе есть две кнопки, которые показывают и скрывают 2 картинки, нажимая на них последовательно...
Что я хочу, так это установить определенную кнопку на клавиатуре, скажем кнопку А, и, нажав на нее, скрыть обе картинки

Можете ли вы привести мне пример такой команды клавиатуры в WPF?

Спасибо

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        { if (linevertical.Visibility == Visibility.Hidden)
            { linevertical.Visibility = Visibility.Visible; }
            else { linevertical.Visibility = Visibility.Hidden; }
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        { if (lineo.Visibility == Visibility.Hidden)
            { lineo.Visibility = Visibility.Visible; }
            else { lineo.Visibility = Visibility.Hidden; }
        }
    }
}

2 Ответов

Рейтинг:
2

tool__

Я выяснил вот что работает:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        { if (linevertical.Visibility == Visibility.Hidden)
            { linevertical.Visibility = Visibility.Visible; }
            else { linevertical.Visibility = Visibility.Hidden; }
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        { if (lineo.Visibility == Visibility.Hidden)
            { lineo.Visibility = Visibility.Visible; }
            else { lineo.Visibility = Visibility.Hidden; }
        }

        private void Mainwindow_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.F5)
            {
                lineo.Visibility = Visibility.Hidden;
                linevertical.Visibility = Visibility.Hidden;
            }
        }
    }
}


Но работает только для клавиш F , я не могу использовать простые буквы, это дает мне ошибки, есть идеи, ребята? я хочу использовать букву "А" вместо буквы F5...


Рейтинг:
17

CHill60

Похоже, вам нужна привязка клавиш (она же горячая клавиша, она же сочетание клавиш)
Взгляните на решения для этого поста CP Как создать короткую стрижку ключи в шаблон WPF с использованием MVVM [^]
справочная документация здесь [^]
В принципе привязать KeyGesture нажатия кнопки в XAML. Хотя я бы, вероятно, объединил эти два метода в один

private void Button_Click(object sender, RoutedEventArgs e)
{ 
        HideMyObject(linevertical);
        HideMyObject(lineo);

}
private void HideMyObject(object myObject)
{
        if (myObject.Visibility == Visibility.Hidden)
        { 
                myObject.Visibility = Visibility.Visible; 
        }
        else 
        { 
                myObject.Visibility = Visibility.Hidden; 
        }
}


Редактирование - ОП не хотите использовать связывание. Попробуйте вместо этого
private void Window_KeyDown(object sender, KeyEventArgs e)
{
        if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.A)
        {
                HideMyObject(linevertical);
                HideMyObject(lineo);
        }
}
Обратите внимание, что это будет делать скрытие, если CtrlИспользуется +A. Это плохая идея-просто клавиша а, если только в окне абсолютно никогда не будет никакого ввода с клавиатуры.


tool__

Спасибо за ваш ответ, если вы нажмете на главное окно конструктора , а затем перейдете на вкладку Свойства\ обработчики событий, там есть опция KeyDown, если вы нажмете на нее, она поставит код за этим:

private void mainwindow_KeyDown(отправитель объекта, KeyEventArgs e)
{

}

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

CHill60

Я обновил свое решение

tool__

Да, в программе не будет абсолютно никаких клавиатурных входов. Взгляните, если можете, на решение, которое я опубликовал ниже, каково ваше мнение по этому поводу? это работает...

CHill60

Когда вы говорите: "Я не могу использовать простые буквы, это дает мне ошибки", в частности, что это за ошибки?

tool__

Я исправил это, я использовал кавычки с буквой "А" и некоторые другие вещи... вот почему подчеркнул его и дал мне ошибки, ему нужна только буква, И все в порядке, спасибо