WPFではListBoxをネストして利用できる。ただ、子ListBox内でマウスホイールでスクロールしても親ListBoxまでスクロールイベントが伝わらない。
これは子ListBox内ScrollViewerでスクロールイベントを処理してしまっているためなので、子ListBoxからScrollViewerをとりのぞけばOK
↓こんな感じでStyleを定義しておいて、
<Style x:Key="NestedListBoxStyle" TargetType="ListBox">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ItemsPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
こう使う。
<ListBox ItemsSource="{Binding Persons}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock>Header</TextBlock>
<TextBlock Text="{Binding Name}" />
<ListBox ItemsSource="{Binding Children}" Style="{StaticResource NestedListBoxStyle}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock>Footer</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
すると子ListBox内のスクロールイベントが親ListBoxに伝わるようになった。
追記(2015/08/16)
kiichi54321さんからコメントをいただきました。
ItemsControlを使用すればデフォルトのスタイルで親ListBoxのスクロールができるようです。
お好みの方法でどうぞ。