关于WPF 窗体的AllowsTransparency属性

在窗体设置了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中将窗体的最大高度设置为工作区的高度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

砖农L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值