分组和虚拟化时 WPF DataGrid 调整大小问题

Kob*_*ari 1 wpf virtualization grouping datagrid

WPFDataGrid有一个属性允许虚拟化与分组一起使用:VirtualizationPanel.IsVirtualizingWhenGrouping="True"。当我将其设置为 True 时,我注意到当整个数据网格宽度发生变化时,具有星形大小的列不再调整大小。

要重建,请创建一个新的 WPF 应用程序,并在 MainWindow.xaml 中设置以下代码:

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d">
<Grid>
    <DataGrid x:Name="grid" 
            CanUserResizeColumns="False"                
            AutoGenerateColumns="False"
            VirtualizingPanel.IsVirtualizingWhenGrouping="True"
            >
        <DataGrid.GroupStyle>
            <GroupStyle/>
        </DataGrid.GroupStyle>
        <DataGrid.Columns>
            <DataGridTextColumn Width="100" Header="1" Binding="{Binding .}">
            </DataGridTextColumn>
            <DataGridTextColumn Width="*" Header="2" Binding="{Binding .}">
            </DataGridTextColumn>
            <DataGridTextColumn Width="100" Header="3" Binding="{Binding .}">
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs 中的以下内容:

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        var csv = new CollectionViewSource();
        csv.Source = new List<string>
        {
            "John", 
            "Paul", 
            "George", 
            "Ringo",
            "John",
            "Paul",
            "George",
            "Ringo",
        };

        csv.GroupDescriptions.Add(new PropertyGroupDescription("."));

        grid.ItemsSource = csv.View;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,当您调整窗口大小时,中间列的大小不会调整。但如果你设置VirtualizationPAnel.IsVirtualizingWhenGrouping="False"调整大小将按预期工作

小智 5

<DataGrid.GroupStyle>
    <GroupStyle>
        <GroupStyle.Panel>
            <ItemsPanelTemplate>
                <DataGridRowsPresenter/>
            </ItemsPanelTemplate>
         </GroupStyle.Panel>
    </GroupStyle>
</DataGrid.GroupStyle>
Run Code Online (Sandbox Code Playgroud)

会解决你的问题。