gpt4 book ai didi

wpf - 除了 c# 中的选定控件外,桌面屏幕变灰

转载 作者:行者123 更新时间:2023-12-04 06:27:47 25 4
gpt4 key购买 nike

我想选择一个要单击的 UI 控件并将桌面屏幕的其余部分半透明地变灰。我在想位图绘制整个屏幕,但这是一个非常缓慢的过程。我想有人知道 WPF 中如何做到这一点。我没有WPF的经验。我想在 Windows 7 上执行此操作。

最佳答案

基本上,您希望显示一个不可聚焦且不响应输入的顶级全屏透明窗口。然后,您可以使用此窗口手动绘制叠加层。我认为最简单的方法是在 Window 上覆盖 OnRender 并绘制一个填充整个窗口但使用剪贴蒙版(通过drawingContext.PushClip)的矩形来排除您想要不覆盖的区域。

编辑:

这是一个例子:

Window 应该是这样设置的:

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
AllowsTransparency="True"
WindowStyle="None"
WindowState="Maximized"
Topmost="False"
Background="{x:Null}"
IsHitTestVisible="False">
</Window>
WindowStyleWindowState设置将导致窗口最大化并与任务栏重叠。 Topmost设置为 true 将导致窗口位于所有其他窗口之上, IsHitTestVisible将导致鼠标单击“失败”。

警告 :如果你设置了这个,你会遇到一个无法关闭的最顶层窗口,因为它不听键盘命令。 您将需要在代码中的某处手动关闭窗口。 可能您想创建一个全局鼠标 Hook 来收听鼠标,并创建一个键盘 Hook 来收听 ESC 或其他东西。

为了让人们远离他们自己,我在上面的示例中将 TopMost 设置为 False。只有在您知道如何/何时在某处的代码中关闭窗口时才将其更改为 true。
Background设置为 null,以便您可以在后面的代码中使用自定义绘图。

后面的代码与此类似:
public MainWindow()
{
InitializeComponent();
}

protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
var screenGeometry = new RectangleGeometry(new Rect(0, 0, ActualWidth, ActualHeight));
var excludeRectangle = new RectangleGeometry(new Rect(200, 200, 150, 150));
drawingContext.PushClip(CombinedGeometry.Combine(screenGeometry,excludeRectangle, GeometryCombineMode.Exclude,null));
drawingContext.PushOpacity(.8);
drawingContext.DrawRectangle(Brushes.Black, null, new Rect(0, 0, ActualWidth, ActualHeight));
drawingContext.Pop();
drawingContext.Pop();
}

您将在其中为 excludeRectangle 使用正确的位置和大小。

如果您运行此代码,您将看到屏幕显示为灰色,除了左上角的一个小矩形。

关于wpf - 除了 c# 中的选定控件外,桌面屏幕变灰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825527/

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