You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中如何从Page页面实现窗口最小化?

WPF Page页面实现窗口最小化的正确方法

你的代码运行崩溃,核心原因是**this.Parent不一定直接是Window对象**。Page通常嵌套在Frame、NavigationWindow这类容器控件中,直接强制转换为Window会得到null,后续访问WindowState时就会触发空引用异常。

下面是几种可靠的解决方法:

方法一:递归查找顶级父窗口

通过视觉树递归向上查找,找到当前Page所属的Window:

using System.Windows.Media;

private Window GetParentWindow(DependencyObject child)
{
    DependencyObject parent = VisualTreeHelper.GetParent(child);
    while (parent != null && !(parent is Window))
    {
        parent = VisualTreeHelper.GetParent(parent);
    }
    return parent as Window;
}

private void minimizeBtn_Click(object sender, RoutedEventArgs e)
{
    var parentWindow = GetParentWindow(this);
    // 空值检查,避免崩溃
    if (parentWindow != null)
    {
        parentWindow.WindowState = WindowState.Minimized;
    }
}

方法二:直接调用主窗口(单窗口场景适用)

如果你的应用只有一个主窗口,可直接通过Application.Current.MainWindow操作:

private void minimizeBtn_Click(object sender, RoutedEventArgs e)
{
    Application.Current.MainWindow.WindowState = WindowState.Minimized;
}

方法三:通过NavigationService获取所属窗口

如果Page是通过导航框架加载的,可借助NavigationService获取其所属窗口:

private void minimizeBtn_Click(object sender, RoutedEventArgs e)
{
    var parentWindow = NavigationService?.Owner as Window;
    if (parentWindow != null)
    {
        parentWindow.WindowState = WindowState.Minimized;
    }
}

关键注意事项

所有方法都必须包含空值检查,这是避免空引用崩溃的核心。无论是哪种方式,都要确保获取到的Window对象不为null后再修改其状态。

内容的提问来源于stack exchange,提问作者Actaeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:25:34