未捕获C#箭头键

时间:2015-07-01 07:49:08

标签: c# wpf

我正在创建一个能够在完整桌面上绘图的程序。我有不同的绘制功能,例如椭圆。还有一个插入一些文本的功能。为此,我使用透明的TextBox(Tbx)。当我调用此函数时,它会创建一个Label,每次我更改文本时都会获得Textbox的文本。这很有效,但我也有一个函数,应该使用最小化Window。插入文本后,该键无效,但仍然使用事件处理程序捕获其他键。如果我不将文本插入Textbox控件,我可以最小化。主要问题是,没有使用事件处理程序捕获,并且不会发生最小化。我不确定KeyDownEvent是否是捕获特殊键的正确事件,例如箭头, Ctrl ,...所以问题是如何修复此代码以捕获↓< / kbd>并执行代码以最小化Window

以下是我的代码的一些部分:

创建标签:

Tbx.Clear();
if (!hasStartPoint)
{
    START = current;
    hasStartPoint = true;
}
this.canvas1.Children.Remove(Lab2);
Lab1 = new Label() { IsEnabled = true, Background = Brushes.Transparent, Foreground = this.brush, FontFamily = textFont, Content = "" };
if (this.thickness > 5000) { FontSize = 5000; }
else { FontSize = this.thickness; }
Canvas.SetLeft(Lab1, START.X);
Canvas.SetTop(Lab1, START.Y);
Tbx.Focus();
isWriting = true;
this.Cursor = Cursors.IBeam;
canvas1.Children.Add(Lab1);
Lab2 = Lab1;

写文字:

void Tbx_TextChanged(object sender, TextChangedEventArgs e)
{
    if (isWriting)
    {
        Lab1.Content = Tbx.Text;
    }
}

写完:

else if (e.Key == Key.Enter || e.Key == Key.End)
{
    if (!isWriting)
    { this.Close(); }
    else
    {
        Lab1 = new Label() { IsEnabled = true, Background = Brushes.Transparent, Foreground = this.brush, FontSize = this.thickness, FontFamily = textFont, Content = "" };
        Canvas.SetLeft(Lab1, 1);
        Canvas.SetTop(Lab1, 1);
        canvas1.Children.Add(Lab1);
        isWriting = false;
        this.Cursor = Cursors.Cross;
    }
 }

最小化KeyDownEvent中的窗口:

else if (e.Key == Key.Down)
    this.WindowState = WindowState.Minimized;

1 个答案:

答案 0 :(得分:2)

捕获特殊键的解决方案是使用PreviewKeyDownEvent。这是因为某些控件不会将这些键视为输入。

  

某些按键,例如TAB,RETURN,ESC和箭头键   通常被某些控件忽略,因为它们不被考虑   输入键按下。例如,默认情况下,Button控件会忽略   箭头键。按箭头键通常会引起焦点   移动到上一个或下一个控件。考虑箭头键   导航键和按这些键通常不会提高   Button的KeyDown事件。但是,按一个箭头键   Button确实引发了PreviewKeyDown事件。通过处理   Button的PreviewKeyDown事件并设置IsInputKey属性   为true,您可以在箭头键的情况下引发KeyDown事件   按下。但是,如果您处理箭头键,焦点将不会   更长时间移动到上一个或下一个控件。