在窗体设置了AllowsTransparency 属性后,最小化后恢复可能会遇到渲染问题,解决此问题可以重载窗体的OnStateChanged方法,在方法中处理最小化事件,如下:
protected override void OnStateChanged(EventArgs e)
{
switch(WindowState)
{
case WindowState.Minimized:
Opacity = 0;
break;
default:
Opacity = 1;
break;
}
}
原理就是在最小化时将窗体设置为全透明,之后恢复时在设置为不透明
在设置AllowsTransparency属性后还会有一个问题,窗体无法拖动,此时可以在窗体属性中加入以下模版:
<Window.Style>
<Style TargetType="Window">
<Setter Property="Background" Value="White" />
<Setter Property="WindowStyle" Value="None" />
<Setter Property="ResizeMode" Value="CanResize" />
<Setter Property="AllowsTransparency" Value="True" />
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="30" ResizeBorderThickness="5" />
</Setter.Value>
</Setter>
</Style>
</Window.Style>
CaptionHeight为窗体标题栏拖动的感应范围,ResizeBorderThickness为四边可缩放的感应范围
在设置AllowsTransparency属性后最大化窗体会使窗体全屏显示,此时同样可以在OnStateChanged中将窗体的最大高度设置为工作区的高度