実際のコンテンツ サイズが初期レイアウト パスのコンテンツの MinWidth/MinHeight および MaxWidth/MaxHeight によって強制されないように初期ウィンドウ サイズが設定されている場合 (たとえば、Window.SizeToContent="WidthAndHeight" を使用)、次の式が成り立ちます。 :
Window.ActualSize - Content.ActualSize =
Window.MinSize - Content.MinSize = Window.MaxSize - Content.MaxSize.
これらの方程式に基づいて、次のコードを導き出すことができます。
public MainWindow()
{
InitializeComponent();
this.SizeChanged += OnWindowSizeChanged;
}
private static void OnWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
var window = (Window)sender;
var content = (FrameworkElement)window.Content;
window.MinWidth = window.ActualWidth - content.ActualWidth + content.MinWidth;
window.MaxWidth = window.ActualWidth - content.ActualWidth + content.MaxWidth;
window.MinHeight = window.ActualHeight - content.ActualHeight + content.MinHeight;
window.MaxHeight = window.ActualHeight - content.ActualHeight + content.MaxHeight;
window.SizeChanged -= OnWindowSizeChanged;
}
最初のレイアウト パスの後にコードを 1 回だけ実行する必要があるため、純粋な宣言型アプローチを使用してこれを効率的に達成する方法がわかりません。