[英]Blending a WPF Window with the desktop
是否可以(以及如何)调整用于在桌面上显示WPF表单的混合模式?
我有一个窗口,可以覆盖整个屏幕。 这是XAML:
<Window x:Class="RedGreenBarsWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Red/Green Overlay" Topmost="True" Height="300" Width="525" AllowsTransparency="True" WindowStyle="None" Background="Transparent" WindowStartupLocation="Manual" IsHitTestVisible="False">
<Canvas Name="canvas" />
</Window>
不能单击它,并且在加载窗口时会对其进行调整大小并移动以覆盖整个屏幕。 然后,我在画布上绘制一些形状,如下所示:
System.Windows.Media.Brush red = new SolidColorBrush(System.Windows.Media.Color.FromArgb(200, 255, 0, 0));
System.Windows.Size s = new System.Windows.Size(System.Windows.SystemParameters.PrimaryScreenWidth, System.Windows.SystemParameters.PrimaryScreenHeight);
int lines = 20;
for (double i = 0; i < s.Width; i += s.Width / lines)
{
System.Windows.Shapes.Rectangle rect = new System.Windows.Shapes.Rectangle
{
Width = s.Width / lines,
Height = s.Height
};
rect.Fill = red;
Canvas.SetTop(rect, 0);
Canvas.SetLeft(rect, i * 2);
canvas.Children.Add(rect);
}
这确实是应该做的,但不是我想要的。 这是在Photoshop中完成的可视化效果(我的图像看起来像“正常”):
我需要找出一种使它看起来像右边的红色框的方法,其中文本不会被覆盖的颜色淡化。 我已经搜索了很多东西,尽管那里有一些库可以用Window中的元素来完成此任务,但我需要混合模式才能扩展到整个桌面。 如何才能做到这一点?
您需要使用其他混合功能。 到目前为止,我相信您没有简单的解决方案; WPF已请求此功能,但尚不支持。
这个另一个问题也是关于为WPF笔刷使用不同的混合功能。 它还包含指向一个不错的(但很长)教程的链接,该教程关于如何实现自定义混合(实际上是一个完整的混合库)。
这些页面包含zip,几乎每个页面上都有源代码。 您需要以下内容来构建它们:(引用).NET 3.5 SP1,DirectX SDK,以及CodePlex上WPF Futures中的Shader Effects BuildTask和模板。
我在这里复制链接:
编辑:要捕获桌面图像,您可以尝试使用具有透明背景的简单FrameworkElement
(例如Rectangle
(“ Transparent
是画笔)。 然后,您可以使用RenderTargetBitmap
类将其转换为ImageBrush。 这是一个代码片段,可以帮助您入门:
public Brush RectangleToBrush(Rectangle rect)
{
int w = (int)rect.ActualWidth;
int h = (int)rect.ActualHeight;
var rtb = new RenderTargetBitmap(w, h, 96d, 96d, PixelFormats.Default);
rtb.Render(rect);
ImageBrush brush = new ImageBrush(BitmapFrame.Create(rtb));
return brush;
}
您可以使用Grid将此矩形放在.xaml文件中,以使其覆盖整个窗口:
<Window ...>
<Grid>
<Rectangle x:Name="DesktopCaptureRectangle"/>
<Grid>
<!-- Your controls here -->
</Grid>
</Grid>
</Window>
注意:我不确定此解决方案在性能方面是否会很好...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.