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宽度,但当垂直滚动条出现时,它也会显示水平滚动条