WPFコントロールを作成して、そのコンテンツに応じてサイズを変更するにはどうすればよいですか?
ほとんどのコントロールでは、XAMLで高さと幅をAuto
に設定し、コンテンツに合わせてサイズを調整します。
コードでは、幅/高さをdouble.NaN
に設定します。詳細については、 FrameworkElement.Width 、特に「備考」セクションを参照してください。
このような問題が発生したため、ウィンドウの幅を指定しましたが、高さはAuto
に設定されていました。子DockPanel
にはVerticalAlignment
がTopに設定され、WindowにはVerticalContentAlignmentがTopに設定されていましたが、Windowはまだコンテンツよりもはるかに高いでしょう。
Snoopを使用して、ウィンドウ内のContentPresenter
(ウィンドウの一部であり、そこに置いたものではない)がVerticalAlignment
をStretch
に設定していて、ウィンドウ全体を再テンプレート化せずに変更されました!
多くのフラストレーションの後、SizeToContent
プロパティを発見しました-これを使用して、コンテンツのサイズに応じて、ウィンドウのサイズを垂直、水平、またはその両方にするかどうかを指定できます。その財産を見つけるのに時間がかかったなんて信じられない!
グリッドなどのコンポーネントを使用している場合:XAMLで、グリッド内の要素にGrid.RowとGrid.Columnが定義されていることを確認し、マージンがないことを確認します。デザイナーモードまたはExpression Blendを使用した場合、特定のセルではなく、グリッド全体に対してマージンを割り当てることができました。セルのサイズ設定については、残りのスペースを埋める追加のセルを追加します。
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
別のコンテナに制約されずに、自由形式でページに表示されるユーザーコントロールがあり、ユーザーコントロール内のコンテンツは自動サイズ調整されず、ユーザーコントロールが渡されたもののフルサイズに拡張されます。
ユーザーコントロールをコンテンツのサイズに合わせて単純にサイズ変更するには、高さのみを考慮して、次のようにon rowを自動サイズに設定してグリッドに配置しました。
<Grid Margin="0,60,10,200">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<controls1:HelpPanel x:Name="HelpInfoPanel"
Visibility="Visible"
Width="570"
HorizontalAlignment="Right"
ItemsSource="{Binding HelpItems}"
Background="#FF313131" />
</Grid>