【问题标题】:DataGrid columns do not stretch any moreDataGrid 列不再拉伸
【发布时间】:2014-03-12 16:00:56
【问题描述】:

我注意到我的项目中的 DataGrid 列不再延伸到 DataGrid 宽度。我唯一做的就是更改了 Assmbly 的名称。 在 XAML 设计器中,它们被拉伸。

    <DataGrid  x:Name="dg" Grid.Row="4" RowHeaderWidth="0" AutoGenerateColumns="False" 
     HorizontalGridLinesBrush="AliceBlue" AlternationCount="2">                

                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="File"  IsReadOnly="True" Width="*" CanUserSort="True" SortMemberPath="File" >
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock  Text="{Binding Path=FileName}" MouseDown="FileName_MouseDown" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

//other columns are similar

                </DataGrid.Columns>                
            </DataGrid>

我尝试过的:

  1. 重建解决方案

  2. 删除“bin”文件夹并重建

  3. 我使用的旧版本没问题,并更改了程序集名称(这只是备份之间的区别),我比较了这两个版本之间的所有文件(在 codecompare 和 notepad++ 中,一一),所有文件都是一样,但一个伸展,另一个没有。两个版本都太旧了,回不去了。

  4. 仅使用 ColumnWidth="*" AutogenerateColumns="True"

  5. 创建新的 Datagrid
  6. Horizo​​ntalContentAlignment="Stretch" 和 Horizo​​ntalAlignment="Stretch"

我满脑子都是想法。无论是否愚蠢,请提供任何想法。谢谢!

【问题讨论】:

  • 您的示例代码有效。你确定?环顾 DataGrid 的容器。
  • 将宽度设置为自动而不是 *
  • @NETscape 即使使用 DataGrid ColumnWidth="*" 也是一样的。 DataGridTemplateColumn 用它们的宽度覆盖它。我尝试添加项目,但还是一样。
  • @ChrisW。自动会拉伸到内容,如果第一列中的内容很宽,那么所有其他内容都会超出屏幕。此外,所有列都有不同的“x*”,具体取决于预期的数据宽度。
  • @Dipak 它的容器是网格行。我尝试移动到屏幕上的不同位置。在设计视图中正确显示,每列根据其宽度在 * 中拉伸

标签: c# wpf xaml datagrid wpfdatagrid


【解决方案1】:

我解决了:

唯一的区别是我在初始化后使用了好的版本MyWindow.Show();。我尝试了几次评论和取消评论这一行,这就是修复。

MyWindow 只是在 xaml 中定义的窗口的名称,并且 show() 不做任何事情,因为窗口无论如何都是可见的。

如果其他人有这个问题,只需在 InitializeComponent() 之后添加WindowName.Show()

除非你们中的任何一个人能想到原因,否则我将其称为错误。

【讨论】:

  • @NETscape 它在另一个网格中的网格中。
【解决方案2】:

供参考:

这种情况显然发生在 DataGrid 位于 ScrollViewer 内部时。所以,正如this other answer 所说,如果你不需要水平滚动条,你可以禁用它:

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">

否则,您必须给 DataGrid 一个宽度。您可以根据链接帖子中 sa_ddam213 的回答创建一个虚拟元素:

<ScrollViewer HorizontalScrollBarVisibility="Auto">
    <Grid x:Name="grid" MinWidth="200">
        <DataGrid Width="{Binding ElementName=grid, Path=ActualWidth}">
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="Column A" Width="1*"/>
                <DataGridCheckBoxColumn Header="Column B" Width="1*"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</ScrollViewer>

【讨论】:

    猜你喜欢
    • 2021-02-03
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多