如何使 XAML DataGridColumns 填充整个 DataGrid?

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

我在 XAML(不是 Silverlight)中使用具有可调整大小的列的 DataGrid,如果用户调整屏幕大小,DataGrid 将展开。

目前,如果所有 DataGrid 列的宽度都小于 DataGrid 的宽度,我会出现一个额外的“列”,该“列”不可单击并且没有任何作用。

有谁知道如何使一列始终调整大小以填充所有剩余空间?

c# wpf xaml datagrid wpf-controls
12个回答
289
投票

如果您使用

Width="*"
,该列将被填充以扩大可用空间。

如果您希望所有列均等地划分网格,请将其应用于所有列。如果您只想填充剩余空间,只需将其应用于该列,其余部分为“自动”或特定宽度。

如果您希望列占据可用宽度的 1/4,您还可以使用

Width="0.25*"
(例如)。


21
投票

确保您的 DataGrid 将

Width
设置为类似
{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
的值。

像这样,您在

Width="*"
元素上设置
DataGrid.Columns/DataGridXXXXColumn
属性应该可以工作。


15
投票

如前所述,

ColumnWidth="*"
对于 XAML 中的 DataGrid 效果非常好。

我在这种情况下使用它:

<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

8
投票

我的 2 Cent ->

聚会已经很晚了

DataGrid -> Column -> Width="*" 仅当 DataGrid 父容器具有固定宽度时才有效。

示例:我将 DataGrid 放在 Grid -> Column 中,其宽度=“Auto”,然后 DataGrid 中的 Width=”*” 不起作用,但如果您设置 Grid -> Column Width=”450” 意味着固定,那么它就可以正常工作


7
投票

将列

Width
属性设置为比例宽度,例如
*


3
投票

同一主题的另一个旋转:

protected void OnWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
    dataGrid.Width = e.NewSize.Width - (e.NewSize.Width * .1);

    foreach (var column in dataGrid.Columns)
    {
       column.Width = dataGrid.Width / dataGrid.Columns.Count;
    }
 }

2
投票

我添加了 HorizontalAlignment="Center" (默认为“Strech”),它解决了我的问题,因为它使数据网格仅根据需要宽度。 (如果有的话,请删除数据网格的宽度设置。)

enter image description here


1
投票

这不会扩展 xaml 网格的最后一列来占用剩余空间,如果

AutoGeneratedColumns="True"


0
投票

将一列的宽度设置为任意值,即 width="*"


0
投票

对于那些寻找 C# 解决方法的人:

如果您出于某种原因需要启用“自动生成的列”,您可以做的一件事是指定除您想要自动调整大小的列之外的所有列的宽度(它不会占用剩余空间,但会调整单元格内容的大小)。 示例(dgShopppingCart 是我的 DataGrid):

dgShoppingCart.Columns[0].Visibility = Visibility.Hidden; dgShoppingCart.Columns[1].Header = "Qty"; dgShoppingCart.Columns[1].Width = 100; dgShoppingCart.Columns[2].Header = "Product Name"; /*This will be resized to cell content*/ dgShoppingCart.Columns[3].Header = "Price"; dgShoppingCart.Columns[3].Width = 100; dgShoppingCart.Columns[4].Visibility = Visibility.Hidden;

对我来说,它是一种解决方法,因为当用户最大化窗口时,我需要调整 DataGrid 的大小。


0
投票

它对我来说效果很好,只需将columnwidth依赖属性设置为columnwidth="*"

它将把列宽度填充到数据网格宽度,就像winforms(autosize = fill)
<DataGrid Grid.Row="0" x:Name="dg1" VerticalAlignment="Top" AutoGenerateColumns="False" Margin="0,0,-6,0" Width="1520" Height="700" CanUserAddRows="True" CanUserDeleteRows="True" ItemsSource="{Binding EmployeeData}" RowDetailsVisibilityMode="Visible" HorizontalGridLinesBrush="DarkBlue" VerticalGridLinesBrush="DarkGreen" ColumnWidth="*" >



0
投票

Grid.ColumnSpan =“12”

© www.soinside.com 2019 - 2024. All rights reserved.