【问题标题】:How do I make XAML DataGridColumns fill the entire DataGrid?如何使 XAML DataGridColumns 填充整个 DataGrid?
【发布时间】:2011-06-29 01:42:47
【问题描述】:

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

目前,如果所有 DataGrid 列的宽度小于 DataGrid 的宽度,我会出现一个额外的“列”,该列不可点击且无用。

有谁知道如何让一列总是调整大小以填充所有剩余空间?

【问题讨论】:

    标签: c# wpf xaml datagrid wpf-controls


    【解决方案1】:

    如果您使用Width="*",该列将填充以扩大可用空间。

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

    如果您希望列占据可用宽度的 1/4,也可以使用 Width="0.25*"(例如)。

    【讨论】:

    • 如果我使用AutoGenerateColumns="True",如何做类似的事情?
    • @javapowered - 我建议问你自己的问题,参考这个。
    • @javapowered <DataGrid AutoGenerateColumns="True" ColumnWidth="*" ItemsSource={Binding} />
    • @MohamedSakherSawan 它确实适用于数据网格。 DataGrid 上的ColumnWidth="*" 和各个列上的Width="*" 都具有预期的效果
    • 给出错误字符串不能转换为'*'
    【解决方案2】:

    确保您的 DataGrid 已将 Width 设置为 {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}} 之类的内容。

    这样,您在DataGrid.Columns/DataGridXXXXColumn 元素上设置的Width="*" 属性应该可以工作。

    【讨论】:

      【解决方案3】:

      如前所述,ColumnWidth="*" 非常适合 XAML 中的 DataGrid。

      我在这种情况下使用它:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          我的 2 美分 ->

          聚会很晚

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

          示例:我将 DataGrid 放在 Grid -> Column 中,其 width="Auto" 然后 Width="*" 在 DataGrid 中不起作用,但如果您设置 Grid -> Column Width="450" 表示固定,那么它工作正常

          【讨论】:

            【解决方案6】:

            同一主题的另一个旋转:

            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;
                }
             }
            

            【讨论】:

              【解决方案7】:

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

              【讨论】:

              • 结合选择的答案和这一个它为我解决了这个问题。我需要删除 Datagrid 本身的宽度。谢谢。
              • 就我而言,接受的答案还不够。像你提到的那样添加HorizontalAlignment="Center" 后,它解决了这个问题。谢谢!
              【解决方案8】:

              这不会扩展 xaml 网格的最后一列以占用剩余空间,如果 AutoGeneratedColumns="True".

              【讨论】:

              • 我已经删除了 AutoGenerateColumns,即使这些列没有被分割或拉伸到数据网格/屏幕的整个宽度。我将网格的相应行设置为“*”,并且列宽度没有指定任何宽度(“自动”或“某个值”)。但我仍然遇到问题,这是我设计的 xaml 代码pastie.org/10085815
              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

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

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

                示例(dgShoppingCart 是我的 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 的大小。

                【讨论】:

                  【解决方案11】:

                  对我来说效果很好,只需将 columnwidth 依赖属性设置为 columnwidth="*" 它就会像 winforms(autosize=fill) 一样将列宽度填充到数据网格宽度 p>

                   <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="*" >
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2010-10-24
                    • 1970-01-01
                    • 2011-02-13
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-08-07
                    • 2015-08-22
                    • 2010-11-17
                    相关资源
                    最近更新 更多