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

时间:2018-10-07 20:12:13

标签: c# wpf keyevent keyeventargs

我希望在按下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 class 中定义了KeyPress函数,如下所示:

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

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

  
    

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

  

我是否需要将焦点设置在窗口上? (我尝试使用Loaded =“ OnLoaded”进行此操作,但有相同的错误消息)

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

3 个答案:

答案 0 :(得分:0)

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

  

MainWindow.g.i.cs

您应该做的是在XAML中,首先输入要处理的事件(在本例中为$title),然后让IDE通过使用TAB键自动生成处理程序来完成其工作。 。您应该以这样的方法结束:

the_title() -> $title  
the_title() = $title  

请注意,自动生成的方法是KeyDown,而您使用的是private void MainWindow_KeyDown(Object sender, KeyEventArgs e) { } 。那是你手工做的第一个线索。

答案 1 :(得分:-1)

我编写了相同的代码,没有错误。您应该在xaml处更改函数名称以重试。然后按下f12键以自动创建函数。

答案 2 :(得分:-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);
            }
        }