我读过很多关于类似问题的帖子,但不知道如何摆脱右侧的额外空间。中间列(应该是具有“240”和“0”值的最右边的列)的宽度为 *,但是当窗口变宽和变窄时,它不会调整以填充所有剩余空间。预先感谢您的帮助。
<UserControl x:Class="Foo.PropertiesPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:RevitDataValidator"
mc:Ignorable="d"
Background="LightGray"
d:DesignHeight="450" d:DesignWidth="800">
<Grid
x:Name="OverallGrid"
Margin="0,0,0,0">
<ItemsControl
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding PackData}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid Grid.Row="1"
AutoGenerateColumns="False"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
VerticalAlignment="Top"
ItemsSource="{Binding PackParameters}">
<DataGrid.Resources>
<DataTemplate DataType="{x:Type local:TextStateParameter}">
<TextBox
Text="{Binding Value}" />
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn
Width="150"
Binding="{Binding Name}" />
<DataGridTemplateColumn
Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>
最简单的方法是配置
DataGrid
以在所有列之间均匀分配可用空间。您可以通过将 DataGrid.ColumnWidth
属性设置为 *
来完成此操作。
如果您只想让最后一列填充剩余空间,则必须将除最后一列之外的所有列的宽度设置为明确的值或
Auto
,而 DataGrid.ColumnWidth
设置为 *
。
但是,当
DataGrid.ColumnWidth
设置为 *
或例如DataGridLength.SizeToCells
那么如果条件发生变化,DataGrid
将自动重新计算布局。DataGridColumn
时,在 DataGridCell
上本地设置宽度会导致单次计算。
可用空间均匀分布在所有列中:
<DataGrid ColumnWidth="*" />
只有特定的列才会共享可用空间。在以下示例中,只有最后一列将填充剩余空间:
<DataGrid ItemsSource="{Binding TableData}"
ColumnWidth="*"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Non stretching column"
Width="Auto" />
<DataGridTextColumn Header="Filling column" />
</DataGrid.Columns>
</DataGrid>