WPF 列表框布局(同时考虑所有行的动态列宽)
WPF ListBox Layout (dynamic column width considering all rows at once)
有没有办法确保 Width="auto"
属性 考虑列表中所有元素的 Width
而不是为列表中的每一行单独计算它?
<ListBox x:Name="listBox" HorizontalContentAlignment="Stretch" DockPanel.Dock="Top">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" />
<TextBlock Grid.Column="1" Text="{Binding Value}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我试过了,但是由于每列的Name
的长度不同,每一行的Name
列的Width
也是不同的。因此,第二列从不同的 x 位置开始。
您可以像这样在 ColumnDefinition
中使用 SharedSizeGroup
属性:
<ColumnDefinition SharedSizeGroup="A"/>
也看看这个:Grid Size Sharing in WPF。
有没有办法确保 Width="auto"
属性 考虑列表中所有元素的 Width
而不是为列表中的每一行单独计算它?
<ListBox x:Name="listBox" HorizontalContentAlignment="Stretch" DockPanel.Dock="Top">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" />
<TextBlock Grid.Column="1" Text="{Binding Value}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我试过了,但是由于每列的Name
的长度不同,每一行的Name
列的Width
也是不同的。因此,第二列从不同的 x 位置开始。
您可以像这样在 ColumnDefinition
中使用 SharedSizeGroup
属性:
<ColumnDefinition SharedSizeGroup="A"/>
也看看这个:Grid Size Sharing in WPF。