C# 具有虚拟化StackPanel的列表框中的额外空间

C# 具有虚拟化StackPanel的列表框中的额外空间,c#,wpf,xaml,virtualizingstackpanel,C#,Wpf,Xaml,Virtualizingstackpanel,我正在使用一个将ItemsPanel设置为VirtualzingStackPanel的列表框 <ListBox ItemsSource="{Binding Items}" ScrollViewer.VerticalScrollBarVisibility="Visible"> <ItemsControl.ItemsPanel> <ItemsPanelTemplat

我正在使用一个将ItemsPanel设置为VirtualzingStackPanel的列表框

        <ListBox ItemsSource="{Binding Items}"
                 ScrollViewer.VerticalScrollBarVisibility="Visible">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel Orientation="Horizontal"
                                        VirtualizationMode="Recycling"
                                        HorizontalAlignment="Stretch"
                                        VerticalAlignment="Top"
                                        />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate>

                    <DataGrid 
                          VerticalAlignment="Top"
                          HeadersVisibility="None"
                          ItemsSource="{Binding Distances}">

                        <DataGrid.Columns>
                            <DataGridTemplateColumn IsReadOnly="True" Width="100">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding FactDistance}"/>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

                            <DataGridTemplateColumn Width="100">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding NormDistanceValue}"
                                                   VerticalAlignment="Stretch"
                                                   HorizontalAlignment="Stretch"
                                                   TextAlignment="Center"/>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

                              <DataGridTemplateColumn Width="100">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding NormLiterature}"
                                                   VerticalAlignment="Stretch"
                                                   HorizontalAlignment="Stretch"
                                                   TextAlignment="Center"/>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

                        </DataGrid.Columns>
                    </DataGrid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ListBox>

看起来还可以:

但当我通过笨拙地拖动拇指进行水平滚动时,奇怪的额外空间出现了

当我调整窗口大小时,额外的空间神奇地消失了。它来自哪里?如何摆脱它


如果我使用simple StackPanel,一切都很好,但我需要使用虚拟化。

ListBox已经在使用虚拟化StackPanel。你不必担心。也不需要VirtualizationMode=“Recycling”只需以通常的方式使用ListBox,而无需将所有覆盖项默认垂直放置。我需要它们水平排列,所以我覆盖了ItemsPanel。一旦你用你的自定义虚拟化StackPanel替换ItemsPanel,你就会得到那些空白。因为这东西已经不能正常测量了。这就是为什么您必须调整窗口大小,从而强制重新测量所有元素和空白。请删除回收模式并试用。回收也可能导致这种奇怪的行为。只是可能。更改为VirtualizationMode=“Standard”,问题仍然存在。。。