3

假设有一个可调整大小的网格,其中 2 列放置在 DockPanel 内(这样它会填满其中的所有空间)。

当列的宽度指定为“1*”时,每列最初获得一半的空间。扩展 column1会使 column2缩小相同的量。结果,水平滚动条显示。(这也意味着我不能扩展两列,即组合宽度大于可见区域。)

当列的宽度指定为“自动”(默认)时,每列自动调整为最大(单元格内容,列标题)。在最后一列之后的右侧可能会留下额外的空间。您可以扩展每一列而不缩小其他列。如果需要,将显示水平滚动条。

如何配置 wpf 数据网格以平均划分可用空间并且扩展任何列不应缩小任何其他列,即水平滚动条应该出现,就好像它们被配置为 Auto 一样?

4

2 回答 2

1

这可能会有所帮助::

dataGrid.Loaded+=new RoutedEventHandler(dataGrid_Loaded);

void dataGrid_Loaded(object sender, EventArgs e)
{
    DataGrid dataGrid = sender as DataGrid;
    double width = dataGrid.ActualWidth;
    int count = dataGrid.Columns.Count;
    foreach (DataGridColumn col in dataGrid.Columns)
    {
        col.Width = width / count;
    }
}
于 2012-12-13T13:37:58.557 回答
1

我认为您需要在每列上设置一个静态宽度才能使其正常工作。我建议使用一个转换器,它采用您的 DataGrid 的宽度并将其除以您拥有的列数

我的博客上有一个相当简单的MathConverter,用于所有数学转换。IMultiValueConverter如果需要,它也很容易扩展到。最终结果将如下所示:

<DataGridTextColumn Width="{Binding ElementName=MyDataGrid, Path=ActualWidth,
    Converter={StaticResource MathConverter}, ConverterParameter=@VALUE/2}" ... />

<DataGrid.Resources>如果您不想在每列上指定宽度,您甚至可以在隐式样式中应用宽度

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridColumn}">
        <Setter Property="Width" 
                Value="{Binding ElementName=MyDataGrid, 
                    Path=ActualWidth, 
                    Converter={StaticResource MathConverter}, 
                    ConverterParameter=@VALUE/2}" />
    </Style>
</DataGrid.Resources>
于 2012-12-13T13:38:25.453 回答