带星形列的DataGrid调整整个DataGrid的大小

本文关键字:DataGrid 调整 | 更新日期: 2023-09-27 18:08:49

我有一个有两列的WPF DataGrid;我想让第二列自动适配网格,所以我将其宽度设置为"*"。但是,在运行时,DataGrid的大小会调整到一个可笑的宽度。

这是我的基本标记,(我认为)删除了无关的控件和属性:

<Grid>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid>
            <StackPanel>
                <DataGrid Name="MyGrid" AutoGenerateColumns="False"
                          CanUserAddRows="False" CanUserReorderColumns="False"
                          CanUserResizeColumns="False">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Column 1" Width="Auto" Binding="{Binding Field1}"/>
                        <DataGridTextColumn Header="Column 2" Width="*" Binding="{Binding Field2}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </StackPanel>
        </Grid>
    </ScrollViewer>
</Grid>

我怀疑问题在于DataGrid在ScrollViewer中。我尝试将ScrollViewer的宽度设置为DataGrid宽度:

Width="{Bidning ElementName=MyGrid, Path=ActualWidth}"

在这篇文章中建议,但没有运气。我还尝试将HorizontalScrollBarVisibility设置为Disabled,但随后一切都消失了(严重)。

我还应该提到所有这些都是在一个UserControl,它位于另一个UserControl,然后坐在窗口,这可能与一切"消失"有关(我怀疑宽度已经疯了,一切都是'off the Window ')。

带星形列的DataGrid调整整个DataGrid的大小

尝试删除DataGrid之前的所有内容,简化布局。DataGrid已经在其默认模板中嵌入了一个ScrollViewer。另外,使用StackPanel,你允许它的孩子来填补所有可用的空间- StackPanel伸展相应的内容的大小。因此,您的DataGrid延伸到无穷大。

我还将DataGrid的Name属性更改为x:Name,原因如下:在WPF中,x:Name和Name属性之间有什么区别?

<DataGrid 
    x:Name="MyGrid" 
    AutoGenerateColumns="False" 
    CanUserAddRows="False" 
    CanUserReorderColumns="False"
    CanUserResizeColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Column 1" Width="Auto" Binding="{Binding Field1}"/>
        <DataGridTextColumn Header="Column 2" Width="*" Binding="{Binding Field2}"/>
    </DataGrid.Columns>
</DataGrid>