web-dev-qa-db-ja.com

コンテンツへのWPFコントロールサイズ?

WPFコントロールを作成して、そのコンテンツに応じてサイズを変更するにはどうすればよいですか?

62
Shimmy

ほとんどのコントロールでは、XAMLで高さと幅をAutoに設定し、コンテンツに合わせてサイズを調整します。

コードでは、幅/高さをdouble.NaNに設定します。詳細については、 FrameworkElement.Width 、特に「備考」セクションを参照してください。

84
Reed Copsey

このような問題が発生したため、ウィンドウの幅を指定しましたが、高さはAutoに設定されていました。子DockPanelにはVerticalAlignmentがTopに設定され、WindowにはVerticalContentAlignmentがTopに設定されていましたが、Windowはまだコンテンツよりもはるかに高いでしょう。

Snoopを使用して、ウィンドウ内のContentPresenter(ウィンドウの一部であり、そこに置いたものではない)がVerticalAlignmentStretchに設定していて、ウィンドウ全体を再テンプレート化せずに変更されました!

多くのフラストレーションの後、SizeToContentプロパティを発見しました-これを使用して、コンテンツのサイズに応じて、ウィンドウのサイズを垂直、水平、またはその両方にするかどうかを指定できます。その財産を見つけるのに時間がかかったなんて信じられない!

29
TabbyCool

グリッドなどのコンポーネントを使用している場合: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>
1

別のコンテナに制約されずに、自由形式でページに表示されるユーザーコントロールがあり、ユーザーコントロール内のコンテンツは自動サイズ調整されず、ユーザーコントロールが渡されたもののフルサイズに拡張されます。

ユーザーコントロールをコンテンツのサイズに合わせて単純にサイズ変更するには、高さのみを考慮して、次のように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>
1
ΩmegaMan