- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 C# 中针对 .NET 4.5 做了一个测试 WinForms APP。该应用程序使用 System.Windows.Controls.Canvas
在黑色背景上绘制一个白色矩形。
我遇到了与键盘相关的事件。
完整源码如下
using System;
using System.Drawing;
using System.Windows.Controls;
using System.Windows.Forms;
using System.Windows.Forms.Integration;
using Brushes = System.Windows.Media.Brushes;
using Panel = System.Windows.Forms.Panel;
using Rectangle = System.Windows.Shapes.Rectangle;
using UserControl = System.Windows.Controls.UserControl;
namespace WpfHostApp
{
internal static class Program
{
/// <summary>
/// Entry point.
/// </summary>
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var panel = new Panel { Dock = DockStyle.Fill };
var form = new Form {Size = new Size(800, 600), Text = "WPF Host Form"};
form.Controls.Add(panel);
var rectangle = new Rectangle {Fill = Brushes.White, Width = 100, Height = 100};
var canvas = new Canvas {Background = Brushes.Black};
canvas.Children.Add(rectangle);
var userControl = new UserControl {Content = canvas};
var elementHost = new ElementHost {Child = userControl, Dock = DockStyle.Fill};
panel.Controls.Add(elementHost);
form.KeyDown += (sender, args) => MessageBox.Show("Key pressed!");
Application.Run(form);
}
}
}
form.KeyDown
事件不会触发(实际上 form.Key*
不会触发),但如果我注释行 panel.Controls .Add(elementHost);
事件触发但显然没有绘制 Canvas 。
我看不出上面的示例代码中有什么会导致这个问题。罪魁祸首是什么?
编辑:
我已经添加了一个用于订阅 KeyDown 的递归函数...没有结果
在 Main()
中,在 form.KeyDown
之后:
foreach (Control control in form.Controls)
{
SuscribeKeyDown(control);
}
SuscribeKeyDown(Control 控件)
函数:
private static void SuscribeKeyDown(Control control)
{
control.KeyDown += (sender, args) => MessageBox.Show("Key pressed!");
foreach (Control controlNested in control.Controls)
{
SuscribeKeyDown(controlNested);
}
}
最佳答案
将 canvas.Focusable
设置为 true
并捕获 Canvas 的 KeyDown
事件:
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var panel = new System.Windows.Forms.Panel { Dock = DockStyle.Fill };
var form = new Form { Size = new Size(800, 600), Text = "WPF Host Form" };
form.Controls.Add(panel);
var rectangle = new System.Windows.Shapes.Rectangle { Fill = System.Windows.Media.Brushes.White, Width = 100, Height = 100 };
var canvas = new Canvas { Background = System.Windows.Media.Brushes.Black,
Focusable = true};
canvas.Children.Add(rectangle);
var userControl = new System.Windows.Controls.UserControl { Content = canvas };
var elementHost = new ElementHost { Child = userControl, Dock = DockStyle.Fill };
panel.Controls.Add(elementHost);
// form.KeyDown += (sender, args) => MessageBox.Show("Key pressed!");
canvas.KeyDown += (sender, args) => MessageBox.Show("Key pressed!");
Application.Run(form);
}
关于c# - KeyDown、KeyUp 和 KeyPressed 不会在托管 WPF 控件的 WinForms 应用程序上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640018/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
所以我正在开发一个黑 jack 程序,但我有点卡住了。我会警告大家,我对编程真的很陌生,而且,我正在项目中期......所以有一些松散的结局和未使用的变量,以及一些不必要的逻辑(用于测试),但这就是我
我正在尝试创建一个可用作 OpenGL 测试工具的示例程序。到目前为止,我的那个似乎可以工作,但似乎忽略了通过统一变量 MVPMatrix 传递的 MVP 矩阵。当我添加代码以读回制服并检查它是否确实
感谢您帮助我,这是有关我的代码的部分。 printf("Thank you, now please enter the logic gate"); scanf("%s", &C); if (C ==
public static void ejemplosString(String palabra){ char[] letras = palabra.toCharArray();
所以,我有一个 php 应用程序,通过 cgi 和 nginx 运行。我有一个 .jar 程序,用于在条形码打印机(Zebra)上打印条形码,猜猜看是什么!。 我的 php 应用程序使用 exec()
我遇到的唯一问题是 getAll() 方法,它似乎在 PersonnelController 类中的位置立即运行。我也曾在其他很多地方尝试过,但都没有成功。 setAll() 方法看起来不错,我已经测
我是一名优秀的程序员,十分优秀!