c#和WPF中的键盘输入不工作
本文关键字:输入 工作 键盘 WPF | 更新日期: 2023-09-27 18:13:13
我正在开发一款小游戏,其中有作为目标的省略号和文本块在这些省略号上显示字母表(每3秒改变一次)。
我想实现一个功能,当用户在键盘上按下一个字母,如果这个字母与某个文本块上显示的字母相匹配,一个名为"t1_hit"的故事板(动画)将开始。
我试了下面的方法,但是行不通。
XAML(仅限textblock部分):
<TextBlock x:Name="txbTarget1" Height="26" Canvas.Left="571" TextWrapping="Wrap" Canvas.Top="92" Width="23" FontWeight="Bold" FontSize="16" Foreground="#FF6BE824" RenderTransformOrigin="0.5,0.5" KeyDown="txbTarget1_KeyDown" ><TextBlock.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</TextBlock.RenderTransform><Run Language="en-in"/></TextBlock>
c#: string k = "";
private void txbTarget1_KeyDown(object sender, KeyEventArgs e)
{
k = txbTarget1.Text;
KeyConverter x = new KeyConverter();
Key kinput = (Key)x.ConvertFromString(k);
if (e.Key == kinput)
{
Storyboard h1 = this.FindResource("t1_Hit") as Storyboard;
h1.Begin();
}
}
任何帮助都是感激的。谢谢你
TextBlock
无法获得焦点,因此无法捕获键盘输入。
必须使用element,其中是焦点。例如window,或者usercontrol:
public void Window_KeyDown(object sender, KeyEventArgs e)
{
k = txbTarget1.Text;
KeyConverter x = new KeyConverter();
Key kinput = (Key)x.ConvertFromString(k);
if (e.Key == kinput)
{
Storyboard h1 = this.FindResource("t1_Hit") as Storyboard;
h1.Begin();
}
}
从MSDN: UIElement。KeyDown
事件当焦点在该元素上时按下某个键时发生。
https://msdn.microsoft.com/en-us/library/system.windows.uielement.keydown%28v=vs.110%29.aspx