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 的解决方案,但添加了水平滚动的滚动查看器,问题又回来了。这可能与解决方案无法在设计器中正确显示的原因相同,这与 WPF 不知道如何在没有约束宽度的情况下计算宽度有关。

4

3 回答 3

2

我无法确认将第三列设置为 * 不起作用。使用以下 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 回答