MahApps / MahApps.Metro

A framework that allows developers to cobble together a better UI for their own WPF applications with minimal effort.
https://mahapps.com
MIT License
9.27k stars 2.45k forks source link

[Bug] Window.Height changes although SizeToContent.Width is set #3919

Open Symbai opened 3 years ago

Symbai commented 3 years ago

Describe the bug

When setting SizeToContent = SizeToContent.Width and WindowState = WindowState.Minimized in code on application start. The height is changed but it shouldn't. FYI this only happens on MetroWindow but not WPF's default Window.

Environment

MahApps.Metro version: 2.2.0
Windows build number: Win10
Visual Studio: 2019 16.8.0 Preview 2
Target Framework: .Net Core 3.1 & v4.7.2

Reproduce

XAML

<mah:MetroWindow
    x:Class="WpfApp3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
    Width="800"
    Height="600"
    MinHeight="20">
    <Grid />
</mah:MetroWindow>

Code

using System.Windows;
using MahApps.Metro.Controls;

namespace WpfApp3
{
    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            WindowState = WindowState.Minimized;
            SizeToContent = SizeToContent.Width;
        }
    }
}

Actual behavior:

image

Expected behavior:

Comment or remove either this: WindowState = WindowState.Minimized; or that line: SizeToContent = SizeToContent.Width; image

punker76 commented 3 years ago

@Symbai I don't know exactly why this happens, but it's maybe another issue with borderless windows using chrome. A workaround is to set the minimized state at the loaded event of the window:

using System.Windows;
using MahApps.Metro.Controls;

namespace WpfApp3
{
    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            // WindowState = WindowState.Minimized;
            SizeToContent = SizeToContent.Width;
            this.Loaded += SizeToContentDemo_Loaded;
        }

        private void SizeToContentDemo_Loaded(object sender, RoutedEventArgs e)
        {
            WindowState = WindowState.Minimized;
        }
    }
}