C# DataGrid.ColumnWidth="*&引用;不在ScrollViewer中工作

C# DataGrid.ColumnWidth="*&引用;不在ScrollViewer中工作,c#,wpf,datagrid,scrollviewer,C#,Wpf,Datagrid,Scrollviewer,我有一个DataGrid和ColumnWidth=“*”在ScrollViewer和HorizontalScrollBarVisibility=“Auto”中。不幸的是,这种组合似乎不起作用。当DataGrid正确跨越整个窗口宽度时,列非常小(MinWidth)。如果我将HorizontalScrollBarVisibility更改为Disabled,它会工作,但我会丢失所需的ScrollViewer行为 最简单的工作示例: <Window x:Class="WPF_Sandbox.Mai

我有一个
DataGrid
ColumnWidth=“*”
ScrollViewer
HorizontalScrollBarVisibility=“Auto”
中。不幸的是,这种组合似乎不起作用。当
DataGrid
正确跨越整个窗口宽度时,列非常小(
MinWidth
)。如果我将
HorizontalScrollBarVisibility
更改为
Disabled
,它会工作,但我会丢失所需的
ScrollViewer
行为

最简单的工作示例:

<Window x:Class="WPF_Sandbox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF_Sandbox"
        Title="MainWindow"
        x:Name="ThisControl">
    <ScrollViewer HorizontalScrollBarVisibility="Auto">
        <DataGrid AutoGenerateColumns="False" ColumnWidth="*">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Column 1" />
                <DataGridTextColumn Header="Column 2" />
                <DataGridTextColumn Header="Column 3" />
                <DataGridTextColumn Header="Column 4" />
            </DataGrid.Columns>
        </DataGrid>
    </ScrollViewer>
</Window>


为什么会发生这种情况?我如何解决它?

您看到的问题是,由于Datagrid位于ScrollViewer中,它实际上有无限的扩展空间,因此无法计算宽度。为此,您可以将DataGrid宽度绑定到ScrollViewer ViewportWidth,如下所示:

<DataGrid AutoGenerateColumns="False" ColumnWidth="*" 
Width="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}">


试着用2*代替*@MahdiFarhani,它什么都不做。主要问题是ScrollViewer,但让我来找出原因。当您删除ScrollViewer时,一切都很好。@MahdiFarhani,正如我所说,是水平ScrollBarVisibilit造成了问题。将其设置为Disabled(禁用)就足够了,并且可以正常工作。不过,我希望有这样的行为。您可以使DataGrid宽度等于ScrollViewer宽度,但当垂直滚动条出现时,它也会显示水平滚动条