【问题标题】:How to handle UWP KeyDown interaction with Canvas in c#如何在 C# 中处理 UWP KeyDown 与 Canvas 的交互
【发布时间】:2016-02-02 18:31:22
【问题描述】:

我一直在尝试将这项工作作为游戏的一部分来学习使用 Canvas 时的 UWP 环境。我已经阅读了很多关于让 KeyDown 工作的主题,我迷路了。

不用说我希望,但它们似乎都不起作用,没有一个会导致事件处理程序被调用。

任何帮助将不胜感激。

我的 XAML

    <Grid Background="Black">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Canvas Name="paintCanvas" Background="Black" 
                Grid.Column="1" HorizontalAlignment="Stretch" MaxWidth="642" MaxHeight="422"/>
    </Grid>

我的简化代码在后面:

namespace Game
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            paintCanvas.KeyDown += new KeyEventHandler(OnKeyDownHandler);
        }


        private void OnKeyDownHandler(object sender, KeyRoutedEventArgs e)
        {
            switch (e.Key)
            {
                case VirtualKey.Down:
                    // do something
                    break;
                case VirtualKey.Up:
                    // do something
                    break;
                case VirtualKey.Left:
                    // do something
                    break;
                case VirtualKey.Right:
                    // do something
                    break;
            }
        }
    }
}

【问题讨论】:

  • 毫不奇怪,这行不通。画布是面板,而不是控件,因此它不能聚焦。 KeyDown 事件仅适用于具有输入焦点的控件。
  • 尝试在画布内声明一个控件(例如文本框),然后将其聚焦。按键盘查看 Canvas KeyDown 事件是否被击中。
  • 感谢您的评论。那么为什么画布有一个 KeyDown 事件(仅举一个例子)?如果 KeyDown 事件发生在子控件中,这里的 KeyDown 事件是否会触发,还是应该将处理程序放在控件的 KeyDown 事件属性中?

标签: c# canvas winrt-xaml uwp


【解决方案1】:

您可以使用加速键来处理这个问题。如果你想窃取一些代码,你可以利用模板 10 中的 KeyHelper。

https://github.com/Windows-XAML/Template10/blob/master/Template10%20(Library)/Services/KeyboardService/KeyboardHelper.cs

再一次,您可以只使用模板 10;在 Visual Studio 中转到扩展管理器并搜索“模板 10”或通过 Nuget 添加模板 10 库。

祝你好运!

【讨论】:

  • 谢谢。触发 KeyDown 事件似乎很多。我试试看。
猜你喜欢
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多