UWP VisualTreeHelper.GetParent () возвращает значение null

У меня есть ContentDialog с ListView. Этот шаблон данных ListView's содержит Grid, а этот Grid имеет Button. Код выглядит так:

<ContentDialog x:Name = "DownloadListDialog" x:FieldModifier = "public" Grid.Column = "1">
    <ListView Name = "AssetsListView" IsItemClickEnabled = "False" Grid.Row = "1" SelectionMode = "Single" MaxHeight = "500" ItemsSource = "{x:Bind _viewModel.Assets, Mode=OneWay}">
        <ListView.ItemContainerStyle>
            <Style TargetType = "ListViewItem">
                       ...
                       ...
                    </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate>
            <DataTemplate x:DataType = "viewModel:AssetViewModel">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width = "*"/>
                        <ColumnDefinition Width = "Auto"/>
                    </Grid.ColumnDefinitions>
                    <StackPanel>
                        <TextBlock Text = "{x:Bind name}"/>
                        <StackPanel Orientation = "Horizontal">
                            <TextBlock Text = "{x:Bind lblFileSize}"/>
                            <TextBlock Text = "{x:Bind contentSize, Mode=OneWay}"/>
                            <TextBlock Text = "{x:Bind contentUrl}" Visibility = "Collapsed"/>
                        </StackPanel>
                    </StackPanel>
                    <Button Content = "Download" Click = "Button_Click" HorizontalAlignment = "Right" Grid.Column = "1"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentDialog>

Вот мой обработчик события Button Click:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    var grid = VisualTreeHelper.GetParent(sender as Button) as Grid;
    ...
    ...
}

Проблема в том, что переменная VisualTreeHelper.GetParent(sender as Button) as Grid всегда возвращает null на моем ПК. Но этот же код, когда я развертываю на своем мобильном телефоне, работает отлично (т.е. переменной grid присваивается правильное значение).

Обновлено: Вот мое живое визуальное дерево, подтверждающее, что у кнопки есть родительская сетка. UWP VisualTreeHelper.GetParent () возвращает значение null

Минимальная версия приложения: сборка 14393 Целевая версия приложения: сборка 15063 Версия для Windows: сборка 17134 (версия 1803)

Примечание. Я попытался изменить целевую версию приложения на 1803, но проблема осталась.

Вы хотите обходной путь или знать, почему он нулевой? Возможны обходные пути, ответы сложнее

Johnny Westlake 24.05.2018 14:58

Правильный ответ был бы отличным. Но я также хотел бы добавить, что тот же код некоторое время назад работал нормально.

ravi kumar 24.05.2018 15:37

Странно - я пробовал ваш код и, похоже, работает нормально. Вы можете проверить, возвращает ли var obj = VisualTreeHelper.GetParent(sender as Button); что-нибудь?

Romasz 26.05.2018 22:02

Используйте доступные вам инструменты. Перейдите к Отладка / Windows / Live Visual Tree и проверьте его. Вот ваш список, содержащий 5 элементов, показывающий первый элемент с кнопкой как дочерний элемент сетки, как и ожидалось..

jsanalytics 26.05.2018 23:10

@Romasz, который возвращает null.

ravi kumar 27.05.2018 08:29

@jsanalytics Я проверил, что он возвращает ноль на ПК и правильное значение на мобильном телефоне.

ravi kumar 27.05.2018 08:31

@ravikumar, вы говорите, что проверили, что визуальное дерево одинаково в обоих случаях, одно и то же работает, а другое нет?

jsanalytics 27.05.2018 16:13

Также обновите свой вопрос, указав точный контекст, в котором вызывается ваш ContentDialog. Ваш Выпуск ОС, версия и сборка также должен быть уместной информацией.

jsanalytics 27.05.2018 16:17

@jsanalytics Я обновил свой вопрос.

ravi kumar 28.05.2018 18:46

Я попытался создать образец для проверки этой проблемы, но после появления диалогового окна я нажал кнопку и могу получить его родительскую сетку. Я не могу воспроизвести эту проблему со своей стороны, это помогло бы нам разобраться в этой проблеме в той же точке, если бы вы могли предоставить воспроизводимый проект. Более того, я обнаружил, что вы задали эту проблему в MSDN, пожалуйста, проверьте нить.

Breeze Liu - MSFT 31.05.2018 09:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
10
1 095
1

Ответы 1

Как я понимаю из другого вопроса, есть несколько способов получить родительский элемент VisualTreeHelper. Может быть, на вашем мобильном телефоне или ПК в фоновом режиме загружаются разные вещи, так что местоположение, где вы можете найти объект сетки, изменилось.

Вы можете проверить этот ответ как ссылку на то, что я сказал выше: FrameworkElement.Parent и VisualtreeHelper.GetParent ведут себя по-разному

Неа. Даже свойство Parent sender as Button равно нулю.

ravi kumar 30.05.2018 12:07

Я вижу, что у многих людей возникают проблемы с получением правильных элементов управления из VisualTreeHelper. Я не могу проверить вашу проблему здесь, но вы пробовали использовать LogicalTreeHelper.GetParent ()? Также я нашел ресурс, который может дать вам больше информации: shrinandvyas.blogspot.com/2013/01/…

Niels de Schrijver 30.05.2018 13:26

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