ウィンドウの高さ=「自動」が期待どおりに機能しない


223

私がやろうとしていることは、明示的に高さ/幅を持たないウィンドウを表示することです(両方の値が省略されているか、に設定されていますAuto)。ウィンドウがそのサイズを自動で見つけると思っていました-含まれているすべてのユーザーコントロールのサイズを計算しますが、これは実際には機能しません!

代わりにActualwidthActualheight値が512に設定された大きなウィンドウが表示されます(?!?!)

ウィンドウ宣言:

<Window x:Class="Window3"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window3" 
  Height="Auto">
<StackPanel>
    <Label>Window</Label>
</StackPanel>
</Window>

このウィンドウをダイアログとして表示:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click
    Dim dlg As New Window3
    dlg.ShowDialog()
End Sub

これに対する解決策はありますか?フォーム内の多くのコントロールはコンストラクターのパラメーターに基づいて折りたたまれ、フォームの実際のサイズを見つけるのは難しい(そして醜い)ため、ウィンドウのサイズを明示的に設定したくありません。


7
次のように.WindowStartupLocation設定してウィンドウを中央に配置することもできます"CenterScreen"
AndersLindénJul

回答:


408

ウィンドウのプロパティを設定しますSizeToContent="WidthAndHeight"。これは役立つはずです。


89
コピーペーストしたい怠惰な人々のためにSizeToContent="WidthAndHeight";)
Tono Nam

4
SizeToContent = "WidthAndHeight"の使用には注意が必要です。ウィンドウのコンテンツのサイズが画面サイズより大きくなると、ウィンドウが画面からオーバーフローする可能性があります。
カイロ・レン

@KyloRenなので、問題を回避するにはMaxWidthまたはMaxHeightを設定する必要があります
Carlos Liu

@CarlosLiu長い間、私は練習していないので思い出せませんが、論理的には正しいように聞こえます。デモで試してみてください:)
カイロレン

これは素晴らしいですが、なぜ私はまだ興味がHeight="Auto"ありWidth="Auto"ますか?同じことを達成しないのですか?これらの設定ではウィンドウのコンテンツが考慮されないので、私は推測しています。
マイクローリー

7

古い質問ですが、更新された回答:

@ Muad'Dibが彼の答えで示唆したように:

あなたが設定する必要がありSizeToContent="WidthAndHeight"ます。

ウィンドウのコンテンツのサイズが画面サイズより大きくなると、ウィンドウが画面からオーバーフローする可能性があります。したがって、次のことを考慮する必要があります。

MaxWidth="600"
MaxHeight="400"

そして、それMaxHeight="400"が尊重されていない場合はどうしますか?画面の制限まで拡大しますか?
andrepaulo 2017

3

ウィンドウの高さを自動に設定することはできません。これを行うには、少しトリックを使用して、メインのメイングリッドコンテナーに名前を付け、その高さを自動に設定してから、ウィンドウの高さをメイングリッドの高さにバインドします。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.