C# 带键盘覆盖的wpf扩展控件
我正在扩展控件画布,并为MouseEvents添加自己的自定义覆盖。我很想知道为什么这种基本的覆盖,即当用户按下键盘上的任何键时,它不会发出信号。如何使此重写在wpf c#中工作C# 带键盘覆盖的wpf扩展控件,c#,wpf,C#,Wpf,我正在扩展控件画布,并为MouseEvents添加自己的自定义覆盖。我很想知道为什么这种基本的覆盖,即当用户按下键盘上的任何键时,它不会发出信号。如何使此重写在wpf c#中工作 这将适用于您的特定示例。正如其他人所指出的,您必须使Canvas可聚焦并实际聚焦,以便它接收键盘事件 public class CanvasGraph : Canvas { public CanvasGraph() { Focusable = true; Loaded +
这将适用于您的特定示例。正如其他人所指出的,您必须使
Canvas
可聚焦并实际聚焦,以便它接收键盘事件
public class CanvasGraph : Canvas
{
public CanvasGraph()
{
Focusable = true;
Loaded += OnCanvasGraphLoaded;
}
private void OnCanvasGraphLoaded(object sender, RoutedEventArgs routedEventArgs)
{
Focus();
Loaded -= OnCanvasGraphLoaded;
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Key == Key.Enter)
{
Console.WriteLine("context menu open");
e.Handled = true;
}
}
}
这将适用于您的特定示例。正如其他人所指出的,您必须使
Canvas
可聚焦并实际聚焦,以便它接收键盘事件
public class CanvasGraph : Canvas
{
public CanvasGraph()
{
Focusable = true;
Loaded += OnCanvasGraphLoaded;
}
private void OnCanvasGraphLoaded(object sender, RoutedEventArgs routedEventArgs)
{
Focus();
Loaded -= OnCanvasGraphLoaded;
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Key == Key.Enter)
{
Console.WriteLine("context menu open");
e.Handled = true;
}
}
}
控件必须具有焦点。您可以对此进行测试:
这也可以帮助您:控件必须具有焦点。您可以对此进行测试:
这还可以帮助您: