【问题标题】:Independent width in a WPF GridWPF 网格中的独立宽度
【发布时间】:2017-12-13 18:57:45
【问题描述】:

我在 WPF 中有一个 2 行 2 列的网格。我希望每行的列宽都是独立的。我试过“自动”,但没有成功。下面是一张图来说明:

如何使用网格来完成此操作?

【问题讨论】:

  • “列独立”是什么意思?你想要什么?
  • 尝试设置您的列跨度属性

标签: c# silverlight windows-phone-7 grid


【解决方案1】:

如果您必须使用网格布局,那么您有几个选择:

选项 1:将每一行设为单列,然后在您希望独立列的每一行中嵌套一个网格:

XAML

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>

    <TextBlock Text="AAAAAAAAAAAAAAAAAAAA" />

    <Grid Grid.Row="1">
      <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>

      <TextBlock Text="BBBBBBB"">
      <TextBlock Grid.Column="1" Text="CCCCCCC" />
    </Grid>
</Grid>

选项 2:在行中使用 ColumnSpan:

XAML

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
  </Grid.RowDefinitions>

  <Grid.ColumnDefinitions>
    <ColumnDefinition />
    <ColumnDefinition />
  </Grid.ColumnDefinitions>

      <TextBlock Grid.ColumnSpan="2" Text="AAAAAAAAAAAAAAAAAAAA" />
      <TextBlock Grid.Row="1" Text="BBBBBBB"">
      <TextBlock Grid.Row="1" Grid.Column="1" Text="CCCCCCC" />
    </Grid>
</Grid>

*这些是在没有编辑器的情况下键入的,可能需要一些调整。

【讨论】:

    【解决方案2】:

    两个网格?

    <StackPanel Width="277">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="AAAAAAAAAAAAAAAAAAAA" Grid.Row="0" Grid.Column="0"/>            
        </Grid>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="BBBBBBB" Grid.Row="0" Grid.Column="0"/>
            <TextBlock Text="CCCCCCC" Grid.Row="0" Grid.Column="1"/>
        </Grid>
    </StackPanel>
    

    【讨论】:

    • 如果使用 StackPanel 进行布局,则不需要第一个网格,因为网格中只有一个 TextBlock 元素。此外,第一个网格有不必要的列;整个行和列定义可以一起删除,这将只留下一个嵌套在网格内的 TextBlock。使用单个网格的两种不同布局查看我的答案。
    • @MetroSmurf 是的,很公平,我假设他确实有更多内容可以放在第一个网格的第二列中。如果他希望行的宽度完全独立,那么即使使用行跨度也是不可能的。
    猜你喜欢
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2020-06-25
    相关资源
    最近更新 更多