You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Keyboard.IsKeyDown报错“Keyboard不存在”,该如何解决?

问题:使用Keyboard类时提示“Keyboard doesn't exist”错误

我在尝试使用Keyboard类时遇到报错“Keyboard doesn't exist”,错误详情显示找不到该类型。我的代码如下:

using System;
using System.Windows;     // shows this is unnecessary 

namespace HelloWorld
{
    public class Map
    {
        public string[][] layer { get; set; }
        public int[][] collision { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine(System.Windows.Input.Keyboard.IsKeyDown(ConsoleKey.Spacebar));
            }
        }
    }
}

我尝试添加using Windows.Input;命名空间,但只出现IDE0005警告(冗余引用)。我希望在游戏开发中使用Keyboard.IsKeyDown方法,请问该如何解决?


解决方案

1. 明确项目类型限制

System.Windows.Input.Keyboard是WPF框架专属API,仅能在WPF项目(.NET Framework或.NET 5+的WPF应用)中正常工作。控制台项目没有WPF的消息循环环境,直接引用相关程序集也无法运行该API。

如果是控制台项目检测按键,改用原生控制台API即可:

using System;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                if (Console.KeyAvailable)
                {
                    var key = Console.ReadKey(true);
                    Console.WriteLine(key.Key == ConsoleKey.Spacebar);
                }
            }
        }
    }
}

2. 基于WPF项目使用Keyboard类

如果你的游戏是WPF项目,先确保正确引用WPF相关程序集:

  • 右键项目→管理NuGet程序包,安装Microsoft.WindowsDesktop.App.WPF(针对.NET Core/.NET 5+)
  • 或在项目文件中添加框架引用:
<ItemGroup>
  <FrameworkReference Include="Microsoft.WindowsDesktop.App.WPF" />
</ItemGroup>

然后使用正确的命名空间和枚举类型:

using System;
using System.Windows.Input;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            // 注意WPF使用的是Key枚举,而非ConsoleKey
            while (true)
            {
                Console.WriteLine(Keyboard.IsKeyDown(Key.Space));
            }
        }
    }
}

3. 游戏开发更适配的方案

专业游戏开发建议使用专门的游戏框架,这类框架的输入API更贴合游戏场景:

  • Unity:使用Input.GetKeyDown(KeyCode.Space)
  • MonoGame:使用Keyboard.GetState().IsKeyDown(Keys.Space)
  • Godot:通过输入映射或Input.IsActionPressed("space")处理输入

这些框架无需依赖WPF/WinForms的UI环境,能更好地处理游戏中的实时输入需求。


内容的提问来源于stack exchange,提问作者Tilak Rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:32:17