Почему VisualTreeHelper.GetChildrenCount возвращает 0 элементов управления верхнего уровня?

1

Я изменил код, присутствующий в принятом ответе здесь, чтобы вернуть первый найденный элемент управления определенного типа. Но когда я пытаюсь начать перемещение из самого окна, VisualTreeHelper.GetChildrenCount возвращает 0, хотя на нем есть сетка. Модификации, которые я сделал, не влияют на результат.

Вот как я называю метод:

DockPanel panel = UIHelper.FindFirstChild<DockPanel>(this);

И вот мой код XAML:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="216" Width="267">
    <Grid>
        <DockPanel Height="200" Width="250">
            <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Background="LightBlue">
                <Button Content="01" Margin="1 1 15 1"/>
                <Button Content="02" Margin="1"/>
                <Button Content="03" Margin="1"/>
            </StackPanel>

            <StackPanel Orientation="Horizontal" Height="25" DockPanel.Dock="Bottom" Background="LightBlue">
                <TextBlock VerticalAlignment="Center">Processing...</TextBlock>
                <ProgressBar Value="75" Width="100" Margin="4"/>
            </StackPanel>

            <Grid>
                <TextBlock>Content area</TextBlock>
            </Grid>
        </DockPanel>
    </Grid>    
</Window>
Теги:
wpf

1 ответ

5
Лучший ответ

Поскольку вы вызываете его в дереве конструктора, визуальное дерево еще не готово. Вы должны вызвать его в Window.Loaded event вместо

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    DockPanel panel = UIHelper.FindFirstChild<DockPanel>(this);
    Console.WriteLine(VisualTreeHelper.GetChildrenCount(panel)); //returns 3
}
  • 0
    Я наткнулся на другую проблему. Он возвращает 1 для меня, и тип элемента управления System.Windows.Controls.Border , а не Grid ...
  • 0
    что ты имеешь в виду типа это Border ? У вас нет Border но это часть макета Window по умолчанию, например, но вы DockPanel
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню