使网格列根据内容适当调整宽度

  • 本文关键字:调整 网格 wpf xaml layout
  • 更新时间 :
  • 英文 :


我需要3列:

  • 可变宽度标签
  • 标签有更多的可变宽度(需要被截断)
  • 图标,固定大小

目前我得到的是:

<Grid SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<!-- I tried 'Width' instead of 'MaxWidth'. No difference -->
<ColumnDefinition MaxWidth="80" SharedSizeGroup="Label" />
<ColumnDefinition Width="*" SharedSizeGroup="Name" />
<ColumnDefinition Width="Auto" SharedSizeGroup="Icon" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding Label}" 
FontWeight="Bold"
TextTrimming="CharacterEllipsis"
TextWrapping="NoWrap" />
<!-- Started with a simple TextBlock, tried StackPanel, now Grid.
Still this one pushes the icon to the right -->
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding Name}"
FontWeight="Bold" />
<TextBlock Grid.Column="1"
Text="{Binding CombinedDisplayName}"
TextTrimming="CharacterEllipsis"
TextWrapping="NoWrap" />
</Grid>
<materialDesign:PackIcon Grid.Column="2"
HorizontalAlignment="Right"
Kind="ConsoleNetworkOutline" />
</Grid>

我要的是:

  • 第一列应该占用它所需的空间
  • 第三列是固定的,并且总是向右最大化(父网格改变大小)
  • 第二列应该有剩余的空格,如果需要,文本应该被截断

我也试图给这个父网格一个固定的大小。但它只会工作,如果我给硬编码的大小TextBlocks。

编辑:

现在一个不好的副作用是:当中心部分太小时,它会"拉"。右列。但是右边的一列应该一直保持在最右边,中间的一列应该占据整个空间。

不,像往常一样,一旦你发布了问题,你就会得到它:

中间Width=*列上的SharedSizeGroup把我搞砸了。现在我有:

& lt; Grid.ColumnDefinitions>& lt;/Grid.ColumnDefinitions>

这样,第一列取决于文本的长度,第三列在最右边,中间的一列占用所有其他的空间,并在那里截断字符串。

所以调整父视图的大小是有效的,所有的空间都被很好地利用了。

最新更新