为什么KeyDown不是在我的控件上工作,而是在整个窗体上工作
本文关键字:工作 窗体 控件 KeyDown 我的 为什么 | 更新日期: 2023-09-27 17:57:48
我使用此例程检查我的LeftCtrl
键是否在图像控件上按下
private void mainImage_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl)
{
LeftCtrlButtonIsPressed = true;
}
}
private void mainImage_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl)
{
LeftCtrlButtonIsPressed = false;
}
}
当我在图像或图像周围的边框上设置事件时,不会命中:
<Border x:Name="mainImageBackBorder" .... KeyDown="mainImage_KeyDown" KeyUp="mainImage_KeyUp"> <! -- Does not Hit -->
<Image x:Name="mainImage" ... KeyDown="mainImage_KeyDown" KeyUp="mainImage_KeyUp"> <! -- Does not Hit -->
<Image.RenderTransform>
<! -- ... -->
</Image.RenderTransform>
</Image>
</Border>
但是,当我在我的窗口:上设置它时,它命中s
<Window x:Class="ProjectName.MainWindow"
..
DataContext="{StaticResource mainViewModel }"
Title="MainWindow" Height="600" Width="800" KeyDown="mainImage_KeyDown" KeyUp="mainImage_KeyUp"> <!-- It Hits -->
您的图像控件将不会接收KeyDown事件,因为Focusable属性默认设置为false。来自Focusable文档的第一行:
只有聚焦元素接收键盘输入。
同样值得注意的是:
当直接从UIElement导出时(与从Control相反),考虑一下你是否希望你的元素是可聚焦的,因为默认情况下,元素将不可聚焦。如果您希望元素如果是可聚焦的,请重写类型的静态构造函数,如下所示:
正如您从Image类文档中看到的,它派生自UIElement,而不是Control,因此默认情况下它无法接收焦点。
如果您使图像可聚焦,这应该是正确的,但请记住明显的副作用-用户的当前焦点可能会在没有视觉指示的图像控件上丢失。