WPF与Winforms中的窗口透明度

时间:2010-08-06 14:58:23

标签: wpf winforms opacity

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

我猜测WPF正在跳过一些DirectX或OpenGL箍,而Winforms只是通过API为窗口设置alpha,但我可能会偏离基础。

1 个答案:

答案 0 :(得分:2)

同意,这很重要:

   private void VerifyConsistencyWithAllowsTransparency(WindowStyle style)
   {
       if (AllowsTransparency && style != WindowStyle.None)
       {
           throw new InvalidOperationException(SR.Get(SRID.MustUseWindowStyleNone));
       }
   }

WPF使用完全相同的机制将其实现为Windows窗体,分层窗口。没有明显的理由它在WPF中不会以相同的方式工作。从Window.cs中提取的代码片段简单地将其排除在外。但是,UsesPerPixelOpacity属性有一个提示:

启用每像素不透明度时,系统不再绘制非客户区域。这是因为UsesPerPixelOpacity的预期目的是显示在互操作场景中工作的非矩形顶级UI,并显示矩形非客户区域失败了。

“互操作方案”,我想。