在可视树中我可以找到ComboBox弹出窗口(带有ComboBoxItems的列表)?
我已经以编程方式打开了一个ComboBox,当在调试器的WPF Tree Visualizer中观看它时,我看到以下内容:
: ComboBox
templateRoot : Grid
PART_Popup : Popup
toggleButton : ToggleButton
templateRoot : Border
splitBorder : Border
Arrow : Path
contentPresenter : ContentPresenter
: TextBlock
我希望看到ScrollViewer带有某种项目主机(StackPanel?),也许是PART_Popup所在的地方,但没有。
那它在哪里?
答案 0 :(得分:5)
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):