带有Star列的DataGrid会调整整个DataGrid的大小

时间:2011-09-15 21:45:46

标签: c# wpf xaml datagrid wpfdatagrid

我有一个包含两列的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>

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

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

this post中所述,但没有运气。我也尝试将Horizo​​ntalScrollBarVisibility设置为Disabled,但随后一切都消失了(严重)。

我还应该提到所有这一切都在一个UserControl中,它位于另一个UserControl中,然后它位于Window中,这可能与“消失”的一切有关(我怀疑宽度已经疯狂,一切都是'关闭窗')。

1 个答案:

答案 0 :(得分:1)

尝试删除DataGrid之前的所有内容,从而简化布局。 DataGrid已经包含嵌入在其默认模板中的ScrollViewer。此外,使用StackPanel,您可以让其子项填充所有可用空间 - StackPanel根据其内容的大小进行拉伸。因此,您的DataGrid会延伸到无限远。

我还将DataGrid的Name属性更改为x:Name,这就是原因: In WPF, what are the differences between the x:Name and Name attributes?

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