【问题标题】:Window transparency in WPF vs WinformsWPF 与 Winforms 中的窗口透明度
【发布时间】:2011-03-26 09:30:42
【问题描述】:

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

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

【问题讨论】:

    标签: wpf winforms opacity


    【解决方案1】:

    同意,这太重了:

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

    WPF 使用与 Windows 窗体、分层窗口完全相同的机制来实现这一点。没有明显的原因它不会在 WPF 中以相同的方式工作。从 Window.cs 中提取的代码 sn-p 简单地将其排除在外。但是,UsesPerPixelOpacity 属性有一个提示:

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

    “互操作场景”,我猜。

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多