Метод WPF KeyDown не может быть найден в классе, несмотря на то, что он определен - PullRequest
0 голосов
/ 07 октября 2018

Я хочу, чтобы метод KeyPress вызывался при нажатии клавиши ввода, поэтому я записал событие KeyDown для всего окна в определение окна (показано ниже):

<Window x:Name="window" x:Class="MoonLander.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:MoonLander"
    xmlns:oxy="http://oxyplot.org/wpf"
    mc:Ignorable="d"
    Loaded="OnLoaded"
    KeyDown="KeyPress"
    Title="Moon Lander 2018" Height="580.714" Width="958.824" AutomationProperties.AcceleratorKey="" Background="White">

Я определилфункция KeyPress в моем MainWindow class примерно так:

public void KeyPress(object sender, KeyEventArgs e)
{
   //Do something
}

Есть идеи, почему я получаю это сообщение об ошибке?:

Ошибка CS1061 «MainWindow» не содержит определения для «KeyPress», и >> невозможно использовать доступный метод расширения «KeyPress», принимающий первый аргумент типа >> «MainWindow»найдено (вам не хватает директивы using или >> ссылки на сборку?)

Нужно ли устанавливать фокус на окно?(Я попытался сделать это, используя Loaded = "OnLoaded", но у меня было то же сообщение об ошибке)

Я попытался изменить уровень защиты и изменить первый параметр на объект MainWindow, но я получаю ту же ошибку,

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

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

   public void KeyPress(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Key == Key.Enter)
                {
                    MessageBox.Show("Enter Key Pressed!");
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
0 голосов
/ 08 октября 2018

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

MainWindow.gics

То, что вы должны были сделать, находится в XAML, начните свведите событие, которое вы хотите обработать, в данном случае KeyDown, а затем позвольте среде IDE выполнить свою работу, используя клавишу TAB для автоматического создания обработчика.В итоге вы должны получить такой метод:

private void MainWindow_KeyDown(Object sender, KeyEventArgs e)
{
}

Обратите внимание, что автоматически сгенерированный метод - private, тогда как ваш public.Это была первая подсказка, что вы сделали это вручную.

0 голосов
/ 08 октября 2018

Я пишу тот же код и не получаю ошибки. Вам нужно изменить имя функции в xaml, чтобы повторить попытку. И нажать клавишу f12, чтобы автоматически создать функцию.

...