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

s8vozzvw  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(200)

我需要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>

我想要的是:

  • 第一列应占用所需的空间
  • 第三列是固定的,并且始终在右侧显示最大值(父栅格会更改大小)
  • 第二列应包含剩余空间,如果需要,应截断文本

我也试着给这个父网格一个固定的大小。但是只有当我给文本块硬编码的大小时它才能工作。
编辑:
现在一个坏的副作用是:当中心部分太小时,它会"拉"右列。但右列应该一直停留在最右边,中心应该只是占据整个空间。

pw9qyyiw

pw9qyyiw1#

像往常一样,一旦你发布了问题,你自己就会得到它:
中间Width=*列上的SharedSizeGroup把我搞砸了。现在我有:
<Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
这样第一列取决于文本的长度,第三列在最右边,中间的一列占据了所有其他的空间,并在那里截断字符串。
因此,调整父视图的大小是有效的,所有的空间都得到了很好的利用。

相关问题