C# 带有星形列的DataGrid可调整整个DataGrid的大小

C# 带有星形列的DataGrid可调整整个DataGrid的大小,c#,wpf,xaml,datagrid,wpfdatagrid,C#,Wpf,Xaml,Datagrid,Wpfdatagrid,我有一个WPF数据网格,有两列;我希望第二列自动适应网格,因此我将其宽度设置为“*”。然而,在运行时,DataGrid会调整到一个荒谬的宽度 以下是我的基本标记,其中(我认为)删除了无关的控件和属性: <Grid> <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> <Grid> <St

我有一个WPF数据网格,有两列;我希望第二列自动适应网格,因此我将其宽度设置为“*”。然而,在运行时,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>
如中所述,但没有运气。我还尝试将HorizontalScrollBarVisibility设置为Disabled,但随后一切都消失了(严重)


我还应该提到的是,所有这些都存在于一个UserControl中,它位于另一个UserControl中,然后位于窗口中,这可能与所有内容“消失”有关(我怀疑宽度已经疯了,所有内容都“离开了窗口”)。

尝试在数据网格之前删除所有内容,简化布局。DataGrid已经在其默认模板中嵌入了一个ScrollViewer。另外,使用StackPanel,您允许其子对象填充所有可用空间-StackPanel会根据其内容的大小进行拉伸。因此,您的
DataGrid
延伸到无限远

我还将DataGrid的Name属性更改为x:Name,原因如下:


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

我还将DataGrid的Name属性更改为x:Name,原因如下:



您正在使用.Net 4.0吗?我回忆起大约2-3周前关于同一主题的另一个帖子。我认为这是4.0的一个bug,它在3.5中工作。是的,使用.NET4.0。如果这是一个重复的问题,如果有人能给我指出前面的问题,我将不胜感激。我找了它,但找不到。在WPF标记下查找并返回一个方法,您可能会找到它。您正在使用.NET4.0吗?我回忆起大约2-3周前关于同一主题的另一个帖子。我认为这是4.0的一个bug,它在3.5中工作。是的,使用.NET4.0。如果这是一个重复的问题,如果有人能给我指出前面的问题,我将不胜感激。我找了它,但找不到。在WPF标签下查找并返回一个方法,您可能会找到它。
Width="{Bidning ElementName=MyGrid, Path=ActualWidth}"
<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>