WPF – 无边框窗口没有正确最大化

好吧,所以我一直在谷歌搜索几个小时,似乎无法找到我所遇到的问题的直接答案。 我有一个自定义窗口, WindowStyle = "None"AllowsTransparency = "True"当我点击我的最大化按钮时:

  private void MaximizeButton_Click(object sender, RoutedEventArgs e) { if(this.WindowState == WindowState.Normal) { App.Current.MainWindow.WindowState = WindowState.Maximized; } else { App.Current.MainWindow.WindowState = WindowState.Normal; } } 

它几乎完全按照它的方式最大化,除了它似乎在窗口的顶部和左侧有-6px的边距。

这是它的样子

我不希望那个白色空间存在(它只是白色,因为谷歌Chrome在它背后开放,它实际上是透明的)。 我需要应用程序最大化以适应整个屏幕,不包括任务栏。 到目前为止,我发现的唯一修复是在按下最大化按钮时将窗口Margin = "6, 6, 0, 0"设置为Margin = "6, 6, 0, 0" 。 以下是其余代码供参考:

StartUp.xaml

                             

StartUp.xaml.cs

 using System.Windows; namespace Expense_Calculator { ///  /// Interaction logic for StartUp.xaml ///  public partial class MainWindow : Window { public MainWindow() { this.MaxHeight = SystemParameters.WorkArea.Height; this.MaxWidth = SystemParameters.WorkArea.Width; InitializeComponent(); } private void CloseButton_Click(object sender, RoutedEventArgs e) { Application.Current.Shutdown(); } private void MaximizeButton_Click(object sender, RoutedEventArgs e) { if(this.WindowState == WindowState.Normal) { App.Current.MainWindow.WindowState = WindowState.Maximized; } else { App.Current.MainWindow.WindowState = WindowState.Normal; } } private void MinimizeButton_Click(object sender, RoutedEventArgs e) { this.WindowState = WindowState.Minimized; } } } 

App.xaml中

                                                                                                       14                                     

按照设计(出于什么原因,我不知道),当你有WindowStyle="None"并且你最大化窗口时,它会在屏幕的实际边缘延伸几个像素。

在您的代码中,您将窗口的实际大小限制为工作区的确切尺寸。 由于窗口的最大化仍然将窗口的左上角放在工作区域的左上角和左上角的几个像素上,窗口的可见部分必然小于工作的整个宽度。区域,因此右侧和底部的暴露区域。

正如评论者Evk所指出的 ,通过删除窗口上的大小限制(只有在窗口最大化时才可以执行,如果您愿意),窗口可以扩展到WPF想要的完整大小,确保完全覆盖工作区域。

在您的后续评论中,目前尚不清楚您是否真的希望覆盖任务栏。 在任何一种情况下,您可能会发现这些链接有助于满足您在这方面的特定需求:
使用WindowState问题最大化窗口(应用程序将隐藏窗口任务栏)
考虑任务栏,最大化窗口(使用WindowStyle = None)

或者,您仍然可以设置大小限制,但考虑到WPF在窗口最大化时坚持的额外像素边距,将尺寸设置为大于所需的尺寸,以便没有暴露区域。

对于它的价值,这里是一个简化的代码示例,仅关注此处的特定行为:

                                

而且当然:

 public partial class MainWindow : Window { public MainWindow() { this.MaxHeight = SystemParameters.WorkArea.Height; this.MaxWidth = SystemParameters.WorkArea.Width; // Compensate for the extra space WPF adds by increasing the max width and height here //this.MaxHeight = SystemParameters.WorkArea.Height + 12; //this.MaxWidth = SystemParameters.WorkArea.Width + 12; InitializeComponent(); } } 

我在所有四个角中都包含了TextBlock元素,以便更容易看到窗口大小如何受各种属性值的影响。

这样做,添加主视图的构造函数并在WindowState上创建一个事件更改。

  private void UpdateMarginOnWindowState() { if (this.WindowState == WindowState.Maximized) { this.MainContainer.Margin = new Thickness(6); return; } this.MainContainer.Margin = new Thickness(0); }