Где ComboBox всплывающее окно в визуальном дереве?

Где в визуальном дереве я могу найти всплывающее окно 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, но ничего.

Так где это?

1 ответ

Решение

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 не имеют общего корня. Они принадлежат разному дереву визуалов, поэтому они не видны в визуализаторе дерева WPF, поскольку для просмотра его дерева визуалов необходимо открыть PopUp.

Вы можете использовать Snoop, шпионскую утилиту WPF, которая также имеет функцию для проверки дерева визуалов. Снимок, взятый из Snoop для всплывающего окна, выглядит следующим образом (Windows 8):

Другие вопросы по тегам