2010-08-06 104 views
3

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

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

回答

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,并且显示矩形非客户区域会失败该目的。

“互操作场景”,我想。