WPF如何实现窗口最小化时保留系统原生窗口动画效果
WPF窗口最小化保留系统原生动画的实现方法
直接设置WindowState = WindowState.Minimized没有动画是因为WPF对该属性的底层实现跳过了系统窗口消息的标准处理流程,不会触发系统预设的最小化过渡动画。
推荐使用调用Win32 API发送系统最小化消息的方案,完全模拟点击标题栏最小化按钮的原生行为,自动携带系统默认动画,实现步骤如下:
- 首先导入Win32 API声明:
using System.Runtime.InteropServices; using System.Windows.Interop; // 在你的窗口类内部添加以下代码 [DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); private const uint WM_SYSCOMMAND = 0x0112; private const IntPtr SC_MINIMIZE = (IntPtr)0xF020;
- 需要触发最小化时调用以下代码即可:
// 获取当前窗口的句柄,this为当前Window实例 IntPtr windowHandle = new WindowInteropHelper(this).Handle; SendMessage(windowHandle, WM_SYSCOMMAND, SC_MINIMIZE, IntPtr.Zero);
注意事项
- 该方案完全遵循系统窗口行为,动画效果和系统设置完全同步:如果系统开启了窗口动画就会显示,关闭则无,和原生窗口最小化效果完全一致
- 即使是自定义无边框窗口(
WindowStyle="None"),只要没有额外禁用系统窗口的标准行为,该方案同样生效
内容的提问来源于stack exchange,提问作者mohammad
相关产品推荐
相关产品推荐

