1

下のWPFグリッドでは、中央の列は6ではありません。テキストBは、テキストAから6離れているのではなく、右端にあります。他の列に対してAutoの代わりに*を試しましたが、結果は同じです。

真ん中の列を6にするにはどうすればよいですか?回避策はありますか?なぜそれが起こっているのですか?それは意図された動作ですか、それともバグですか?

すべての要素にマージンを設定する必要がないように、この方法でグリッドを作成します。

<ScrollViewer HorizontalScrollBarVisibility="Auto">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="6" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

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

        <TextBlock Grid.ColumnSpan="3" Grid.Column="0" HorizontalAlignment="Left">xxxxxxxxxxxxxxxxxxxxxxxxxxxx</TextBlock>
        <TextBlock Grid.Row="2">Text A</TextBlock>
        <Rectangle Fill="YellowGreen" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" />
        <TextBlock Grid.Row="2" Grid.Column="2"  Background="LightCoral">Text B</TextBlock>
    </Grid>
</ScrollViewer>

注:私のウィンドウ幅は自動です。

編集:@flqのソリューションを使用しますが、水平スクロールを備えたscrollviewerを追加すると、問題が再発します。これはおそらく、ソリューションがデザイナーに正しく表示されないのと同じ理由です。これは、幅を制限せずに幅を計算する方法がわからないWPFと関係があります。

4

3 に答える 3

2

3 列目を * に設定しても機能しないことは確認できません。次の XAML を使用します。

<Grid HorizontalAlignment="Left">
  <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="6" />
      <ColumnDefinition Width="*" />

  </Grid.ColumnDefinitions>

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

  <TextBlock Grid.ColumnSpan="3" Grid.Column="0" HorizontalAlignment="Left">xxxxxxxxxxxxxxxxxxxxxxxxxxxx</TextBlock>
  <TextBlock Grid.Row="2">Text A</TextBlock>
  <Rectangle Fill="YellowGreen" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" />
  <TextBlock Grid.Row="2" Grid.Column="2"  Background="LightCoral">Text B</TextBlock>
</Grid>

私はこれを得る:

スクリーンショット

于 2013-01-22T21:14:59.577 に答える
1

固定長ではない他の列には「*」を使用したいと思います

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="6" />
    <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

ここに画像の説明を入力

于 2013-01-22T21:11:05.237 に答える
0

中央の列を 6 にする方法を教えてください。回避策はありますか?

MaxWidth内部にa を設定することで解決しましたScrollViewer(最大の double 値を使用しました)。

なぜそれが起こっているのですか?それは意図した動作ですか、それともバグですか?

ScrollViewer (またはデザイナー) には、最大幅はありません。レイアウト計算のどこかで、列幅を 6 + * として割り当てています。

最大幅を必要とせずに列幅を計算できるため、最終的にはバグだと思います(固定値として指定され、計算する必要さえありません)。

<ScrollViewer HorizontalScrollBarVisibility="Auto">
    <Grid MaxWidth="1.79769E308">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="6" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

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

        <TextBlock Grid.ColumnSpan="4">xxxxxxxxxxxxxxxxxxxxxxxxxxxx</TextBlock>
        <TextBlock Grid.Row="2">Text A</TextBlock>
        <Rectangle Fill="YellowGreen" Grid.Column="1" Grid.Row="2" />
        <TextBlock Grid.Row="2" Grid.Column="2" Background="LightCoral">Text B</TextBlock>
    </Grid>
</ScrollViewer>

これが結果です

于 2013-01-22T22:49:02.310 に答える