我正在创建一个能够在完整桌面上绘图的程序。我有不同的绘制功能,例如椭圆。还有一个插入一些文本的功能。为此,我使用透明的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;
答案 0 :(得分:2)
捕获特殊键的解决方案是使用PreviewKeyDownEvent
。这是因为某些控件不会将这些键视为输入。
某些按键,例如TAB,RETURN,ESC和箭头键 通常被某些控件忽略,因为它们不被考虑 输入键按下。例如,默认情况下,Button控件会忽略 箭头键。按箭头键通常会引起焦点 移动到上一个或下一个控件。考虑箭头键 导航键和按这些键通常不会提高 Button的KeyDown事件。但是,按一个箭头键 Button确实引发了PreviewKeyDown事件。通过处理 Button的PreviewKeyDown事件并设置IsInputKey属性 为true,您可以在箭头键的情况下引发KeyDown事件 按下。但是,如果您处理箭头键,焦点将不会 更长时间移动到上一个或下一个控件。