wpf程序启动居中并且最小化到托盘修复记录

启动居中 + 最小化到托盘(无闪烁)修复记录

本文记录本次关于“wpf应用启动时窗口居中,且在启用启动最小化时直接最小化到托盘(无任何可见闪烁与缩略窗)”的排查与修复过程,供日后参考。
该软件的功能类似《基于MFC实现的快速输入小工具》,当然这不重要,软件是修复过程的一个参照。
在这里插入图片描述

问题现象

  • 启动勾选“启动最小化”后,窗口会出现以下不良体验:
    • 先在屏幕左上角闪现,之后居中,再最小化到托盘。
    • 某些方案会出现黑块(透明度/布局期间的绘制)。
    • 也有方案会在任务栏左下角出现最小化缩略窗(而非直接进入系统托盘)。
  • 期望行为:
    • 启动最小化开启时,应用应直接最小化到系统托盘,不占用任务栏,也不出现左下角缩略窗;
    • 从托盘恢复时,窗口应居中显示;
    • 启动未勾选最小化时,窗口应“直接居中显示”,且无居中过程的可见动画/闪烁。

根因分析

  • 传统做法在 LoadedShown 时再调整位置与状态,期间窗口已可见,导致“左上角→居中→最小化”的可见过程。
  • 使用 WindowState = Minimized 启动,会让系统创建任务栏最小化缩略窗(左下角出现)。
  • 使用透明度(Opacity=0)在某些显卡/主题上可能出现绘制黑块,且仍可能看到状态变化过程。

关键改动概览

涉及文件:

  • App.xaml.cs
  • MainWindow.xaml.cs
  • Services/TrayService.cs
  • (已有)publish.ps1

1) App.xaml.cs:启动最小化路径的“无可见”初始化

位置:Application_Startup 内部

变更点:

  • 启动时提前加载设置:
    var storage = new StorageService();
    startupSettings = storage.LoadSettings();
    
  • 根据 StartMinimized 决定两条启动路径:
    • 非最小化:正常 mw.Show()(此时 MainWindow 会自行确保居中)。
    • 启动最小化:
      1. 标记 mw.StartMinimizedHandled = true,避免 MainWindow_Loaded 再次隐藏引发闪烁;
      2. 将窗口放到屏幕外侧,禁止任务栏显示、禁止激活:
        mw.WindowStartupLocatio
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值