为什么我必须在WPF表单上将WindowStyle
属性设置为None
才能获得透明度,但在Winforms中我可以在任何表单上执行此操作,并保留边框,标准按钮,等等?很明显,API支持这一点,所以我不清楚WPF的特殊之处是什么会导致这个问题。
我猜测WPF正在跳过一些DirectX或OpenGL箍,而Winforms只是通过API为窗口设置alpha,但我可能会偏离基础。
答案 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,并显示矩形非客户区域失败了。
“互操作方案”,我想。