C# 列表框中的包装行为:垂直填充可用空间,然后水平包装

C# 列表框中的包装行为:垂直填充可用空间,然后水平包装,c#,.net,wpf,datatemplate,C#,.net,Wpf,Datatemplate,我在自定义scrollviewer中有一个列表框,它提供了一些独特的视觉样式。列表框项目spanel是一个WrapPanel,所有列表框项目都是100x100。列表框高度是静态的,不会更改。所需的布局如下:在包装之前垂直填充可用空间,如下所示: 我已经使用了WrapPanel的两个方向变量,但未能实现所需的布局。我怀疑这与我在自定义ScrollViewer控件中包装Listbox和Listbox无法正确计算可用空间有关。由于高度是静态的,我觉得我应该能够做到这一点(它只水平滚动,外部自定义滚动

我在自定义scrollviewer中有一个列表框,它提供了一些独特的视觉样式。列表框项目spanel是一个
WrapPanel
,所有列表框项目都是100x100。列表框高度是静态的,不会更改。所需的布局如下:在包装之前垂直填充可用空间,如下所示:

我已经使用了WrapPanel的两个方向变量,但未能实现所需的布局。我怀疑这与我在自定义ScrollViewer控件中包装Listbox和Listbox无法正确计算可用空间有关。由于高度是静态的,我觉得我应该能够做到这一点(它只水平滚动,外部自定义滚动查看器应该进行滚动)。以下是精简后的当前设置:

<controls:CustomScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden">
    <controls:CustomScrollViewer.Template> .... </controls:CustomScrollViewer.Template>
    <ListBox Height="...">

        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>

        <ListBox.ItemTemplate>
            <DataTemplate> .... </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.Resources>
            <Style TargetType="{x:Type ListBoxItem}"> .... </Style>
        </ListBox.Resources>
    </ListBox>
</controls:CustomScrollViewer>

.... 
.... 
.... 

有没有办法让Listbox在内部使用自定义scrollviewer,而不是将Listbox包装在scrollviewer中?或者如何实现所需的布局?

通过硬编码包裹的高度,将方向设置为垂直,我能够实现所需的布局

我仍然对一个使用自定义scrollviewer替换列表框内部的scrollviewer的解决方案感到好奇