0

我希望在按下回车键时调用 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">

我在我的 MainWindow中定义了函数 KeyPress,如下所示:

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

任何想法为什么我会收到此错误消息?:

错误 CS1061 'MainWindow' 不包含 'KeyPress' 的定义并且 >> 没有可访问的扩展方法 'KeyPress' 接受类型 >>'MainWindow' 的第一个参数可以找到(您是否缺少 using 指令或 >> 程序集参考?)

我需要将焦点设置到窗口吗?(我尝试使用 Loaded="OnLoaded" 执行此操作,但有相同的错误消息)

我尝试更改保护级别并将第一个参数更改为 MainWindow 对象,但我得到了同样的错误。

4

3 回答 3

0

我的猜测是您是手动编写的,而不是使用 IDE 来生成处理程序。这意味着中间代码不包含事件和您的方法的绑定。在您的情况下,该绑定出现在通常命名为这样的隐藏文件中:

主窗口.gics

您应该做的是在 XAML 中,首先键入您希望处理的事件,在这种情况下KeyDown,然后让 IDE 通过使用 TAB 键自动生成处理程序来完成其工作。你应该最终得到这样的方法:

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

请注意,自动生成的方法是private,而您的方法是public. 这是你手工完成的第一个线索。

于 2018-10-08T12:27:23.437 回答
-1

我写了同样的代码,没有错误。你应该在 xaml 更改函数名再试一次。然后按下 f12 键来自动创建函数。

于 2018-10-08T01:37:30.033 回答
-1

我尝试从您的代码中复制问题。但它没有任何问题。请找到我使用的以下代码,

   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);
            }
        }
于 2018-10-08T04:55:55.957 回答