WPF Metro窗口全屏

11

我目前正在开发一个 WPF 应用程序,但我不知道如何将我的应用程序设置为全屏模式。我使用了 MahApps.Metro,所以我的主窗口类型是 Controls.MetroWindow。

我尝试过以下代码:

<Controls:MetroWindow x:Class="MyProject.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                      xmlns:Views="clr-namespace:MyProject.Views"
                      WindowStyle="None"
                      ResizeMode="NoResize"
                      WindowState="Maximized"
                      Title="MyProject">

但它不能隐藏Windows任务栏。但当我使用一个简单的窗口时,它可以正常工作。我查看了MetroWindow的源代码,它继承了Window类,所以我不明白为什么它不能工作。

我发现在Metro中实现全屏窗口的唯一方法是将IgnoreTaskbarOnMaximize属性设为true并删除ResizeMode="NoResize"(请参见下面的代码),运行应用程序并将其最大化。

<Controls:MetroWindow x:Class="MyProject.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                      xmlns:Views="clr-namespace:MyProject.Views"
                      WindowStyle="None"
                      IgnoreTaskbarOnMaximize="True"
                      Title="MyProject">

但我想隐藏最小化和最大化按钮... 你有什么想法可以让Controls.MetroWindow全屏启动吗?


这是MahApps.Metro窗口的固有属性。 MahApps.Metro的默认窗口具有多个P / Invokes,以防止最大化时窗口覆盖任务栏。 - Ming Slogar
2个回答

16

我可以重现你的问题。你应该在这里报告它作为一个bug。

目前一个简单的解决方法可能是:

暂时保持你的xaml与你得到的一样:

<Controls:MetroWindow x:Class="MyProject.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                      xmlns:Views="clr-namespace:MyProject.Views"
                      WindowStyle="None"
                      IgnoreTaskbarOnMaximize="True"
                      Title="MyProject">

Window的代码后台:

public MainWindow() {
  InitializeComponent();
  Loaded += OnLoaded;
}

private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) {
  WindowState = WindowState.Maximized;
  ResizeMode = ResizeMode.NoResize;
  ShowMaxRestoreButton = false;
  ShowMinButton = false;
  Loaded -= OnLoaded;
}

这将给你想要的行为。我们在Loaded事件中设置状态(最大化),隐藏 最小/最大 按钮,并且只执行一次。


这正是我所需要的!非常感谢!好的,我会报告它。 - Junior Dussouillez
@JuniorD。我今天已经报告了:https://github.com/MahApps/MahApps.Metro/issues/797 - Yannick Blondeau

5
使用最新的alpha版本,您有两种不同的方法来获取这个:
第一种方法:
<Controls:MetroWindow x:Class="MyProject.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                      xmlns:Views="clr-namespace:MyProject.Views"
                      ResizeMode="NoResize"
                      WindowState="Maximized"
                      IgnoreTaskbarOnMaximize="True"
                      Title="MyProject">

第二

<Controls:MetroWindow x:Class="MyProject.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                      xmlns:Views="clr-namespace:MyProject.Views"
                      UseNoneWindowStyle="True"
                      WindowState="Maximized"
                      Title="MyProject">

使用第二种解决方案,您也没有标题栏、最小化、最大化和关闭按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接