如何让DataGridTextColumn填满所有剩余空间

问题描述 投票:0回答:1

我读过很多关于类似问题的帖子,但不知道如何摆脱右侧的额外空间。中间列(应该是具有“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>

wpf datagrid wpf-controls
1个回答
0
投票

最简单的方法是配置

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>
© www.soinside.com 2019 - 2024. All rights reserved.