代码之家  ›  专栏  ›  技术社区  ›  3Dave

WPF与Winforms中的窗口透明度

  •  3
  • 3Dave  · 技术社区  · 14 年前

    WindowStyle 属性到 None 在WPF窗体上获得透明性,但在Winforms中,我可以在任何窗体上这样做,并保留边框、标准按钮等?很明显,API支持这一点,所以我不清楚WPF有什么特别之处会导致这个问题。

    我猜WPF正在跳出DirectX或OpenGL的圈套,而Winforms只是通过API设置窗口的alpha,但我可能有点离谱。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Hans Passant    14 年前

    同意,这是严厉的:

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

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

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