透明WPF窗口背后的模糊我正在尝试创建一个带有半透明无边框窗口的WPF应用程序,该窗口模糊了其背后的背景。这是我正在尝试做的一个例子。屏幕截图我尝试使用仅在WindowsVista/7上可用的DwmEnableBlurBehindWindow。我正在尝试找到适用于Windows7、8和10的解决方案。对于任何感兴趣的人,我已经找到了适用于Windows10的解决方案,看起来它在Windows8上是不可能的,就像DavidHeffernan提到的那样,DwmEnableBlurBehindWindow已从Windows中删除8,但是微软重新引入了一个在Windows10中实现这种效果的解决方案。希望我没有迟到。您可以使用SetWindowCompositionAttribute,但随后必须将WindowStyle设置为“None”并实现您自己的本机Window函数和句柄。继承自定义控件也很复杂。但是,长话短说。有BlurryControls。您可以通过浏览“BlurryControls”通过NuGet找到它,或者自己在GitHub上查看代码。无论如何,我希望这会有所帮助。在GitHub上,您还可以找到示例应用程序。Windows8虽然最好完全忘记死胡同,但我们可能需要确保我们的程序在各个版本中表现一致。如果不需要动态背景,尤其是窗口相对较小时(主要候选对象是我们自己的应用程序窗口或类似窗口上的消息框),捕获窗口后面的屏幕并手动对其进行模糊处理的解决方案可能会奏效。在Loaded事件处理程序中:varscreen=window.Owner.PointToScreen(newSystem.Windows.Point((window.Owner.ActualWidth-window.ActualWidth)/2,(window.Owner.ActualHeight-window.ActualHeight)/2));varrect=newRectangle((int)screen.X,(int)screen.Y,(int)window.ActualWidth,(int)window.ActualHeight);varbitmap=newBitmap(rect.Width,rect.Height);使用(vargraphics=Graphics.FromImage(bitmap))graphics.CopyFromScreen(rect.Left,rect.Top,0,0,rect.Size);border.Background=newImageBrush(ApplyGaussianBlur(bitmap.ToBitmapImage())){TileMode=TileMode.None,Stretch=Stretch.None,AlignmentX=AlignmentX.Center,AlignmentY=AlignmentY.Center,};其中border是最外层的Border,通常是完全空的,只适用于Windows8。辅助函数是通常的位图转换:publicstaticBitmapSourceToBitmapImage(thisSystem.Drawing.Bitmapimage){varhBitmap=image.GetHbitmap();varbitmap=System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap,IntPtr.Zero,Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());删除对象(hBitmap);返回位图;ApplyGaussianBlur()最好通过直接位图操作包解决,例如WriteableBitmapExApplyGaussianBlur()并进行必要的修改。微软从Windows8中移除了玻璃效果。这解释了为什么在Windows8及更高版本中没有观察到您期望的模糊效果。你必须学会??在这些操作系统上没有它。以上就是C#学习教程:透明WPF窗口背后分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
