Как я могу получить имя списка, в котором находится панель стека?

Событие dragOver панели стека дает мне доступ к панели стека в качестве отправителя, но как я могу получить имя списка, в котором находится панель стека (панель стека определяется в шаблоне данных). Причина этого заключается в том, чтобы в конечном итоге получить доступ ко всем другим панелям стека в списке, сгенерированном шаблоном данных, поэтому, если я лаю здесь неправильное дерево, я буду признателен за альтернативный способ доступа к другим панелям стека. Спасибо,

Дэн.


person Community    schedule 19.12.2011    source источник


Ответы (4)


Обновленный (рабочий) ответ

Вам нужно подняться по визуальному дереву с помощью VisualTreeHelper.GetParent на StackPanel и, при необходимости, рекурсивно над другими родителями, пока не найдете ListBox (используйте оператор as или is, чтобы определить, что вы его нашли).

Для дополнительного удобства или если вам нужно пройти по дереву в других направлениях (что немного сложнее), вы можете использовать оболочку, которая предоставляет обход в формате LINQy, например вот этот.

Все это говорит о том, что вы также можете взглянуть на Как я могу найти элементы управления WPF по имени или тип?.

person Jon    schedule 19.12.2011
comment
Большое спасибо, Джон, я посмотрю на это, решение родительского свойства, похоже, не работает для меня. - person ; 19.12.2011
comment
@DanielMcNulty: Извините, я забыл об этом ... заржавел. Посмотрите обновленный ответ, вам нужно пройти по визуальному дереву. - person Jon; 19.12.2011
comment
ИДЕАЛЬНЫЙ Джон!! Решил проблему, из-за которой я рвал на себе волосы. Спасибо друг. - person ; 19.12.2011

Используйте свойство .Parent, чтобы получить объект, в котором размещен текущий объект.

person Adam    schedule 19.12.2011
comment
Большое спасибо за ваш ответ - родительское свойство равно null !? Когда я обернул панель стека в элемент управления границей, родительское свойство отображало границу, но когда я убираю это, чтобы панель стека была «корневым» элементом управления в шаблоне данных, она была нулевой, поэтому я предполагаю, что он не может получить доступ к чему-либо снаружи шаблона данных?? Спасибо. - person ; 19.12.2011
comment
Тогда следующим путем будет следовать подходу Джона. - person Adam; 19.12.2011

Согласно этому StackPanel не достигнет корень логического дерева по свойству Parent, так как он находится внутри шаблона, поэтому используйте свойство TemplatedParent. В нем вы, вероятно, получите ListBoxItem, родительским элементом которого будет listbox.

person XanderMK    schedule 19.12.2011

person    schedule
comment
Большое спасибо за ваш ответ - родительское свойство равно null !? Когда я обернул панель стека в элемент управления границей, родительское свойство отображало границу, но когда я убираю это, чтобы панель стека была «корневым» элементом управления в шаблоне данных, она была нулевой, поэтому я предполагаю, что он не может получить доступ к чему-либо снаружи шаблона данных?? Спасибо. - person ; 19.12.2011