Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF与Winforms中的窗口透明度_Wpf_Winforms_Opacity - Fatal编程技术网

WPF与Winforms中的窗口透明度

WPF与Winforms中的窗口透明度,wpf,winforms,opacity,Wpf,Winforms,Opacity,为什么我必须在WPF表单上将WindowStyle属性设置为None,以获得透明度,但在Winforms中,我可以在任何表单上执行此操作,并保留边框、标准按钮等?很明显,API支持这一点,所以我不清楚WPF有什么特别之处会导致这一问题 我猜WPF正在突破DirectX或OpenGL的某些障碍,而Winforms只是通过API设置窗口的alpha,但我可能会偏离基准。同意,这是一个沉重的负担: private void VerifyConsistencyWithAllowsTranspare

为什么我必须在WPF表单上将
WindowStyle
属性设置为
None
,以获得透明度,但在Winforms中,我可以在任何表单上执行此操作,并保留边框、标准按钮等?很明显,API支持这一点,所以我不清楚WPF有什么特别之处会导致这一问题


我猜WPF正在突破DirectX或OpenGL的某些障碍,而Winforms只是通过API设置窗口的alpha,但我可能会偏离基准。

同意,这是一个沉重的负担:

   private void VerifyConsistencyWithAllowsTransparency(WindowStyle style)
   {
       if (AllowsTransparency && style != WindowStyle.None)
       {
           throw new InvalidOperationException(SR.Get(SRID.MustUseWindowStyleNone));
       }
   }
WPF使用与Windows窗体、分层窗口完全相同的机制来实现这一点。没有明显的原因表明它在WPF中不会以同样的方式工作。从Window.cs中提取的代码片段将其排除在外。但是,UseSperPixeLocapacity属性有一个提示:

启用每像素不透明度时,系统将不再绘制非客户端区域。这是因为UseSperPixeLocality的预期目的是显示在互操作场景中工作的非矩形顶级UI,而显示矩形非客户端区域则无法达到此目的

“互操作场景”,我猜