コード内のWPF自動高さ


101

HeightC#コードでWPFコントロールのプロパティの値を " Auto" に設定するにはどうすればよいですか?

<Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
</Grid.RowDefinitions>

この動作をコードビハインドで再現したいと思います。何か案は?

回答:


144

おそらく、このリンクが役立ちます。

プログラムで、WPF要素のHeightまたはWidthをコードでAutoに設定したい場合があります。これを行うには、Double.NaN(Not a Number)値を使用します。

たとえば、C#の場合:

this.txtName.Width = Double.NaN;


1
私の場合は働かないで。しかし、動作によって高さの幅を変更しています(式ブレンド4.0 lib)
フランク

1
リンクは
無効

2
ニムロッドの答えははるかに明確で理解しやすいです。
デビッド

「NaN」の取得は、プロパティ「MaxWidth」の有効な値ではありません
Damitha

私はニムロッドの答えが最もきれいで、今では受け入れられた答えになるはずだと思います(GridLength.Auto以前は可能であったかどうかはわかりません)。GridLength.Star残りの領域を埋めることもあります。
Wolfgang Schreurs

111

使用できます

RowDefinition rd = new RowDefinition();  
rd.Height = GridLength.Auto;  
ContentGrid.RowDefinitions.Add(rd);

8
この回答と受け入れられた回答の違いはありますか?そうでない場合、これはフレームワークを迂回しないための最高の答えになるはずです。
estebro 2015年

3
リフレクターによると、GridLength.Autoは新しいGridLength(1.0、GridUnitType.Auto)です。したがって、受け入れられた回答とまったく同じではありませんが、はるかに読みやすくなっています。
helios456

これは、受け入れられた回答ほど一般的な解決策ではありません。すべてのコントロールがHeightプロパティを 'GridLength'オブジェクト(構造体)として実装するわけではありません。ダブルを使用するだけの場合、この回答は機能しません。そして、質問は一般的に尋ねることではなく、グリッドを例として使用しただけです。
UuDdLrLrSs
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.