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();
            }
        }

任何帮助都是感激的。谢谢你

c#和WPF中的键盘输入不工作

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