0

我正在开发一个小游戏,其中有椭圆作为目标,并且在那些显示字母的椭圆上显示文本块(每 3 秒更改一次)。

我想实现一个功能,其中用户按下键盘上的字母,如果与某个文本块上显示的字母匹配,则将开始一个名为“t1_hit”的故事板(动画)。

我尝试了以下方法,但它不起作用。

XAML(仅文本块部分):

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

任何帮助表示赞赏。谢谢

4

1 回答 1

2

TextBlock无法获得焦点,因此无法捕捉键盘输入。

你必须使用元素,其中是焦点。例如窗口或用户控件:

    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

于 2015-09-17T14:32:23.140 回答