【发布时间】: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