WPF - FrameworkElement - перечислить всех потомков? - PullRequest
2 голосов
/ 18 февраля 2010

У меня есть FrameworkElement (на самом деле ToggleButton), внутри которого есть Popup.

Я получаю к нему доступ так:

ToggleButton button = (ToggleButton)sender;
Popup popup = (Popup)button.FindName("popSelectIteration");

Обычно это работает нормально. Но иногда всплывающее окно является нулевым.

Я пытаюсь найти способ отладить это. Есть ли способ перечислить все "вещи", которые мог найти FindName?


В качестве фона, вот как мое всплывающее окно определяется в ToggleButton:

<ToggleButton Grid.Column="1" HorizontalAlignment="Right" Margin="0,2,0,2" Checked="btnFindIterationChecked">
 <Grid>
  <Popup PlacementTarget="{Binding ElementName=chkIteration}"  Name="popSelectIteration" Closed="popSelectIteration_Closed"
     AllowsTransparency="True" StaysOpen="False" PopupAnimation="Fade">
      <Border BorderBrush="#FF000000" Background="LightBlue" BorderThickness="1,1,1,1" CornerRadius="8,8,8,8" Padding="5">
        <Grid>
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="300"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
          </Grid.RowDefinitions>
          <TextBlock Foreground="Black" >Select Destination:</TextBlock>
          <ScrollViewer Grid.Row="1" >
            <TreeView ItemsSource="{Binding IterationTree}" SelectedItemChanged="TreeView_SelectedItemChanged">
              <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                  <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding PathEnd}" />
                  </StackPanel>
                </HierarchicalDataTemplate>
              </TreeView.ItemTemplate>
            </TreeView>
          </ScrollViewer>
          <Button Grid.Row="2" Background="LightBlue" Content="Clear Selection" Click="btnClear_Click"/>
        </Grid>
      </Border>
    </Popup>
  </Grid>
</ToggleButton>

1 Ответ

1 голос
/ 18 февраля 2010

Попробуйте Снуп . Это отличная утилита отладки WPF для всего, что касается визуального дерева.

Редактировать : Ваша конкретная проблема, похоже, связана со временем. Я предполагаю, что дерево еще не полностью построено, и вы пытаетесь получить доступ к дочернему элементу, хотя он не создан. Подождите, пока самый верхний элемент не получит событие «Loaded».

...