DataGrid.ColumnWidth="*" 在 ScrollViewer 中不工作
DataGrid.ColumnWidth="*" not working in a ScrollViewer
我有一个 DataGrid
和 ColumnWidth="*"
在一个 ScrollViewer
和 HorizontalScrollBarVisibility="Auto"
中。不幸的是,这种组合似乎效果不佳。虽然 DataGrid
正确地跨越整个 window 宽度,但列非常小 (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 中,它几乎可以无限扩展 space,所以它无法计算宽度。为此,您可以将 DataGrid Width 绑定到 ScrollViewer ViewportWidth,如下所示:
<DataGrid AutoGenerateColumns="False" ColumnWidth="*"
Width="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}">
我有一个 DataGrid
和 ColumnWidth="*"
在一个 ScrollViewer
和 HorizontalScrollBarVisibility="Auto"
中。不幸的是,这种组合似乎效果不佳。虽然 DataGrid
正确地跨越整个 window 宽度,但列非常小 (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 中,它几乎可以无限扩展 space,所以它无法计算宽度。为此,您可以将 DataGrid Width 绑定到 ScrollViewer ViewportWidth,如下所示:
<DataGrid AutoGenerateColumns="False" ColumnWidth="*"
Width="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}">