確かにあまりいい方法はなさそうです。
コントロールの大きさを計算して、MinHight、MinWidthを設定する
一時的にSizeToContent="WidthAndHeight"
にすれば計算する必要はありません。
その時のサイズを入れるだけです。
しかしタイトルバーの高さ等はユーザー設定によるので、環境によってずれてしまいます。
SizeToContent="WidthAndHeight"
を入れたままでいい(初期サイズがぴったりサイズでいい)ならLoaded
イベントあたりでMinWidth = Width
等とできます。
xml
1<Window
2 x:Class="Questions288908.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 Loaded="Window_Loaded"
6 SizeToContent="WidthAndHeight">
7 <Window.Resources>
8 <Style TargetType="Button">
9 <Setter Property="Width" Value="200" />
10 <Setter Property="Height" Value="150" />
11 <Setter Property="Margin" Value="20" />
12 <Setter Property="Content" Value="Button" />
13 </Style>
14 </Window.Resources>
15 <StackPanel>
16 <StackPanel Orientation="Horizontal">
17 <Button />
18 <Button />
19 <Button />
20 </StackPanel>
21 <StackPanel Orientation="Horizontal">
22 <Button />
23 <Button />
24 <Button />
25 </StackPanel>
26 </StackPanel>
27</Window>
cs
1using System.Windows;
2
3namespace Questions288908
4{
5 public partial class MainWindow : Window
6 {
7 public MainWindow()
8 {
9 InitializeComponent();
10 }
11
12 private void Window_Loaded(object sender, RoutedEventArgs e)
13 {
14 MinWidth = Width;
15 MinHeight = Height;
16 }
17 }
18}
そもそも論なのですがWPFでのデザインでは、コントロールに固定サイズを入れることはせずに、ウィンドウサイズに合わせて伸縮させるのが一般的です。
もちろん操作不能に小さくならないように、ウィンドウにMinWidth
等を入れることは普通です。
その際は中身の大きさを積み重ねてボトムアップで計算しているのではなく、ウィンドウの最小サイズはこんなもんかな?とトップダウンで決めているような気がします(マイクロソフトのアプリ等を見る限り。もっと小さくできそうなのに小さくならない