0

我可以在可视化树的哪个位置找到 ComboBox 弹出窗口(带有 ComboBoxItems 的列表)?

我以编程方式打开了一个组合框,当在调试器的 WPF 树可视化工具中观看它时,我看到以下内容:

: ComboBox
  templateRoot : Grid
    PART_Popup : Popup
    toggleButton : ToggleButton
      templateRoot : Border
        splitBorder : Border
          Arrow : Path
    contentPresenter : ContentPresenter
      : TextBlock

我希望看到带有某种项目主机(StackPanel?)的 ScrollViewer,可能是 PART_Popup 所在的位置,但什么也没有。

那么它在哪里呢?

4

1 回答 1

6

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)

在此处输入图像描述

于 2014-06-06T19:13:39.987 回答