3

我正在尝试开发一个允许人们“在屏幕上绘图”的 Windows 应用程序。

我正在开发:

.NET 3.5 C#/WPF

我有一个托管 InkCanvas 的 WPF 窗口,两者都具有透明背景。

窗口 XAML 属性:

ShowInTaskbar="True" ResizeMode="NoResize" Background="Transparent"
WindowStyle="None" AllowsTransparency="True" Topmost="True"

InkCanvas 属性:

Background="#11FFFFFF"

我需要以下事件处理程序: - 右键单击​​窗口中的任意位置 - 按 Escape

期望的结果: - WPF 窗口保持在所有其他窗口之上,但不再处于活动状态并且不再接受输入 - WPF 窗口可以再被关注。来自用户的所有输入都应该转到他们当前的焦点窗口,并忽略带有位于所有内容之上的 inkcanvas 的 wpf 窗口

基本用法示例:应用程序的用户正在玩游戏。他们停下来并在 wpf 窗口/inkcanvas 中绘制了一些箭头。他们按退出键结束。wpf 窗口保持在顶部,用户绘制的形状打开,用户的输入返回到他们打开/聚焦的任何窗口。

到目前为止,我已经尝试过:

MouseRightButtonUp ::   

mywindow.isenabled = false

我试过了:

mywindow.IsInputMethodEnabled = false

到目前为止还没有工作,wpf 窗口仍然开始获取用户输入。我不知何故需要让这个窗口显示,但没有被激活..即使它已经“使用”了一段时间。

提前感谢您的任何建议!

4

1 回答 1

1

您可以拦截 WndProc(使用 HwndSource 的 AddHook,如此处所示)并拦截WM_NCHITTEST并返回 HTTRANSPARENT。但这只会让它传递到该线程中的其他窗口。另一个选项可能是设置 WS_EX_TRANSPARENT 扩展样式位。有关示例,请参见此问题的答案。

于 2012-10-18T01:03:09.290 回答