gpt4 book ai didi

wpf - 如何在WPF中创建一个允许鼠标事件通过的半透明窗口

转载 作者:行者123 更新时间:2023-12-03 08:36:52 24 4
gpt4 key购买 nike

我正在尝试在 Adob​​e Lightroom ( http://www.youtube.com/watch?v=87hNd3vaENE ) 中创建类似于 Lights out/lights dim 功能的效果,但在 WPF 中除外。

我尝试的是在现有窗口的顶部创建另一个窗口,使其透明并在其上放置一个半透明的路径几何体。但我希望鼠标事件能够通过这个半透明窗口(到下面的窗口)。

这是我所拥有的简化版本:

<Window x:Class="LightsOut.MaskWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
AllowsTransparency="True"
WindowStyle="None"
ShowInTaskbar="False"
Topmost="True"
Background="Transparent">

<Grid>

<Button HorizontalAlignment="Left" Height="20" Width="60">click</Button>

<Path IsHitTestVisible="False" Stroke="Black" Fill="Black" Opacity="0.3">

<Path.Data>
<RectangleGeometry Rect="0,0,1000,1000 "/>
</Path.Data>
</Path>

</Grid>

窗口是完全透明的,因此在 Path 没有覆盖的地方,鼠标事件会直接通过。到现在为止还挺好。路径对象上的 IsHitTestvisible 设置为 false。因此鼠标事件将通过它传递给同一窗体上的其他控件(即您可以单击按钮,因为它在同一窗体上)。

但是鼠标事件不会通过 Path 对象传递到它下面的窗口。

有任何想法吗?或者更好的方法来解决这个问题?

谢谢。

最佳答案

我遇到了类似的问题并找到了解决方案:

public static class WindowsServices
{
const int WS_EX_TRANSPARENT = 0x00000020;
const int GWL_EXSTYLE = (-20);

[DllImport("user32.dll")]
static extern int GetWindowLong(IntPtr hwnd, int index);

[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);

public static void SetWindowExTransparent(IntPtr hwnd)
{
var extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
}
}

对于您的窗口集:
WindowStyle = None
Topmost = true
AllowsTransparency = true

在窗口后面的代码中添加:
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
var hwnd = new WindowInteropHelper(this).Handle;
WindowsServices.SetWindowExTransparent(hwnd);
}

瞧——点击窗口!查看原始答案: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a3cb7db6-5014-430f-a5c2-c9746b077d4f

关于wpf - 如何在WPF中创建一个允许鼠标事件通过的半透明窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com