尽管已定义WPF KeyDown方法,但在类中找不到该方法

tgabmvqs  于 2022-11-18  发布在  其他
关注(0)|答案(4)|浏览(139)

我希望在按下Enter键时调用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'的定义,并且〉〉找不到接受类型为〉〉'MainWindow'的第一个参数的可访问扩展方法'KeyPress'(您是否缺少using指令或〉〉程序集引用?)
是否需要将焦点设置到窗口?(我尝试使用Loaded=“OnLoaded”执行此操作,但出现相同的错误消息)
我尝试更改保护级别并将第一个参数更改为MainWindow对象,但仍然出现相同的错误。

ny6fqffe

ny6fqffe1#

我猜您是手动编写的,而不是使用IDE生成处理程序。这意味着中间代码不包含事件和方法的绑定。该绑定出现在一个隐藏文件中,通常命名为如下所示的名称(在您的示例中):
MainWindow.g.i.cs
您应该在XAML中先键入要处理的事件(在本例中为KeyDown),然后使用Tab键自动生成处理程序,让IDE执行其工作。您应该以如下所示的方法结束:

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

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

l3zydbqr

l3zydbqr2#

我发现,删除XAML中的错误行,保存项目,关闭它,再次打开它,检查错误是否消失,然后将该行放回工作。这是一个解决方案,多次不同的事情比我愿意承认!

cgfeq70w

cgfeq70w3#

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

o8x7eapl

o8x7eapl4#

我试图从你的代码复制的问题。但它的工作没有任何问题。请找到下面的代码我使用,

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);
            }
        }

相关问题