【问题标题】:Wide columns pushing content off XAML Grid宽列将内容推离 XAML 网格
【发布时间】:2015-02-19 17:57:04
【问题描述】:

我想展示一个包含三列的网格,其中每列填充可用空间,但不会将后续列推离网格末端。每列需要至少有部分内容(由 MinWidth 定义)可见。

这就是我所追求的:

___________________________________________
|                      |         |        |
|very-wide-first-col...|second...|third...|
|______________________|_________|________|

这是我得到的:

___________________________________________
|                           |             |
|very-wide-first-column-text|second-column|-text|third-column-text
|___________________________|_____________|

这是我的代码:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="Auto"/>
  </Grid.ColumnDefinitions>
  <TextBlock Grid.Column="0" Text="very-wide-first-column-text" TextTrimming="CharacterEllipsis"/>
  <TextBlock Grid.Column="1" Text="second-column-text" TextTrimming="CharacterEllipsis"/>
  <TextBlock Grid.Column="2" Text="third-column-text" TextTrimming="CharacterEllipsis"/>
</Grid>

MinWidth 和 MaxWidth 的组合似乎无法实现所需的布局 - 似乎它们不适用于 Auto 并且比例大小不是我想要的。我也尝试使用 DockPanel,但没有帮助。

【问题讨论】:

  • 删除第一个ColumnDefinition 中的Width="Auto"。结果是你想要的吗?
  • 不,因为如果第二列变得太宽,它会将第一列的内容推离网格的左侧。
  • 如果是这种情况,这意味着所有三个的总宽度超过了网格的宽度。您希望如何展示它们?
  • 我希望它们被截断,以便网格至少显示每列(或其内容的)MinWidth 指定的宽度。

标签: xaml layout grid windows-runtime


【解决方案1】:

使用星星。

Width="2*" 表示第一列 其他两个的 Width="1*"。

这意味着可用总宽度在所有数字之间平均分配(在本例中为 4 - 第一列为 2/4,其他各为可用宽度的 1/4)。

总宽度由列所在的容器(网格)决定。

【讨论】:

  • 这样,第一列总是占可用空间的一半,其他占 1/4,而我希望它根据每列文本的宽度是动态的(但使用 Auto 只是推送一切都结束了)。看起来我将不得不创建一个自定义面板。
  • 我不认为有一种简单的方法可以做你想做的事,因为从逻辑上讲,如果 XAML 都“太多”或“太少”,XAML 如何确定每列的宽度' 内容?就我个人而言,我会考虑包装文本并修复列宽,但这取决于这是否适合您的特定项目。
  • 对我来说,您可能可以在每个文本列中使用多个列 - 例如让每个文本块跨越 2 或 3 列,将这些列中的第一列设置为固定宽度(文本的最小值),然后让其他 1 或 2 列根据需要自动更改。这可能需要一些实验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2021-04-12
相关资源
最近更新 更多