PART_Popup 确实有 StackPanel,其中 ItemsHost 设置为 True 并由 ScrollViewer 包裹。您可以在MSDN上查看默认模板。
这是它的样子:
<Popup x:Name="Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid x:Name="DropDown"
SnapsToDevicePixels="True"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border x:Name="DropDownBorder"
BorderThickness="1">
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
</Border.BorderBrush>
<Border.Background>
<SolidColorBrush Color="{DynamicResource ControlLightColor}" />
</Border.Background>
</Border>
<ScrollViewer Margin="4,6,4,6"
SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Contained" />
</ScrollViewer>
</Grid>
</Popup>
更新
PopUp 和 comboBox 不共享同一个根。它们属于不同的 Visual Tree,这就是为什么在 WPF Tree Visualizer 中不可见的原因,因为需要打开 PopUp 才能看到它的 Visual Tree。
您可以使用Snoop,它是 WPF 间谍实用程序,它还具有检查 Visual Tree 的功能。从 Snoop 拍摄的弹出式快照如下所示(Windows 8):
