VirtualizingPanel と IScrollInfo を派生させる独自の VirtualizingWrapPanel があります。
以下は、xaml での使用例です。
<ListBox x:Name="StationsListView"
DataContext="{StaticResource ViewModelKey}"
ItemsSource="{Binding Stations}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<common:VirtualizingWrapPanel IsItemsHost="True"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Button Style="{DynamicResource DestinationButtonStyle}">
<TextBlock Text="{Binding FullName}"
Style="{DynamicResource DestinationStationTextBlockStyle}"
TextTrimming="CharacterEllipsis" />
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
x:Name="vwp" で VirtualizingWrapPanel に名前を付けると、コード ビハインド ファイル内の名前でパネルを参照できます。つまり、IntelliSense はパネルを参照することを提案します。しかし、コンパイルは失敗します。コンパイラは、xaml でパネルに付けた名前を解決できないと文句を言います。
ContendRendered イベント内のオブジェクト グラフでパネルを検索して、この問題を解決しました。しかし、それは汚いハックのようです。
Name プロパティを使用して (何らかの方法で) この問題を解決するにはどうすればよいですか?