質問

次のグリッド行定義を持つ単純なxamlコントロールがあります:

<Grid.RowDefinitions>
            <RowDefinition Height="15*" />
            <RowDefinition Height="60*" />
            <RowDefinition Height="20*" />
            <RowDefinition Height="20*" />
            <RowDefinition Height="15*" />
</Grid.RowDefinitions>

行1〜3はそれぞれ、テキストブロックを保持します。テキストブロックには、テキストが含まれる場合と含まれない場合があります。コードビハインドでは、テキストがない場合はRowDefinitionを最小化します。基本的に、コードビハインドには次のものがあります。

if(textblock.Text != ""){
   grid.RowDefinitions[elementRow].Height = new GridLength(20, GridUnitType.Star);
}
else{
   grid.RowDefinitions[elementRow].Height = new GridLength(0, GridUnitType.Star);
}

行0と4をxamlで定義されたままにしておきたい。行2のテキストブロックにテキストが表示されていても、残念ながらこれは機能しません。

何か間違ったことをしていますか。

ご協力をお願いします

ジェームズ

役に立ちましたか?

解決

スター表記を使用しないで、RowDefinitionsにAutoを使用します。 TextBlock.Textが空の場合、TextBlockのVisibilityをVisibility.Collapsedに設定します。グリッドの行は自動的にゼロに縮小されます。

他のヒント

これは質問に対する答えではなく、単なる情報です。

高さ(または列の幅)の*は、行(または列)の幅がHeight =&quot; *&quot;であることを意味します。 (またはWidth =&quot; *&quot;)は残りのスペースを占有します。そのため、Height =&quot; 100&quot;のグリッドに4行のグリッドがある場合、これを行うと:

<Grid.RowDefinitions>
            <RowDefinition Height="10" />
            <RowDefinition Height="10" />
            <RowDefinition Height="10" />
            <RowDefinition Height="*" />
</Grid.RowDefinitions>

行幅Height =&quot; *&quot; 70 DIU(デバイスに依存しないユニット)になります。

アスタリスクの前に数字を追加(Height =&quot; 2 *&quot;)できるのは、アスタリスクを使用する行が複数ある場合のみです。アスタリスクの前の数字は、特定の行がどれだけのスペースを取るかを示します(2 * = 2倍、3 * 3倍、など)。 I. E。:

<Grid.RowDefinitions>
            <RowDefinition Height="10" />
            <RowDefinition Height="10" />
            <RowDefinition Height="2*" /> <!-- this row will be twice as tall as the one below -->
            <RowDefinition Height="*" />
</Grid.RowDefinitions>

ここで、3番目の行の高さは54 DIU(約26 DIUの高さの4番目の行の2倍)で、両方の高さは合計80で、グリッドの残りのスペース(10 + 10 + 26 + 54 = 100、グリッドの高さ)。

ところで、チャーリーの答えに同意します。

Columns =&quot; 1&quot;を使用して、アイテムを UniformGrid 内に配置できます。また、空のテキストを取得したときに、TextBoxの表示を折りたたむことができます。

 <UniformGrid Columns="1">
    <TextBlock Text="AAAA" Visibility="Collapsed" Grid.Row="0"/>
    <TextBlock Text="BBBBB" Grid.Row="1"/>
    <TextBlock Text="CCCCC" Grid.Row="2"/>
    <TextBlock Text="DDDDD" Grid.Row="3"/>
    <TextBlock Text="EEEE" Grid.Row="4"/>
</UniformGrid>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top