尝试将 Topmost 设置为 true,当您的应用程序失去焦点时,您可以将 Opacity 设置为 0。
我做了这个 Xaml:
<Window x:Class="OpacTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Topmost="True" Background="Transparent" ShowInTaskbar="False" AllowsTransparency="True" WindowStyle="None" Width="400" Height="300">
<Grid>
<Border Background="Black" CornerRadius="5" />
</Grid>
</Window>
我在 C# 中为 Window 执行了此操作:
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
Opacity = 1;
}
protected override void OnDeactivated(EventArgs e)
{
base.OnDeactivated(e);
Opacity = 0;
}
这让你成为了其中的一部分;您需要一种方法来了解桌面是否获得焦点。
我敢打赌,您可以通过挂接到桌面窗口的 WndProc 事件并查找 WM_ACTIVATE 来做到这一点。
你可以:
- 调用 GetDesktopWindow 获取桌面窗口的句柄
- 使用 ap/invoke 调用为 WndProc 设置回调
- 处理 WM_ACTIVATE 或适当的 Windows 消息并将您的不透明度设置回 1