2014-10-01 4 views
3

У меня есть кнопка в качестве последнего столбца каждого ListViewItem. Когда кнопка нажата, мне нужно найти элемент списка родительского списка кнопок (отправителей) в событии клика.Найти родителя ListViewItem кнопки на событии Click

Я попытался:

ListViewItem itemToCancel = (sender as System.Windows.Controls.Button).Parent as ListViewItem; 

DiscoverableItem itemToCancel = (sender as System.Windows.Controls.Button).Parent as DiscoverableItem; 

DiscoverableItem быть типом, что ListView привязан. Я пробовал все разные комбинации, и каждый возвращает null.

Спасибо, Meisenman

ответ

7

Вы можете использовать VisualTreeHelper получить предка визуального некоторого элемента. Конечно, он поддерживает только метод GetParent но мы можем реализовать некоторый рекурсивный метод или что-то подобное, чтобы идти вверх по дереву, пока желаемый тип родителя не найден:

public T GetAncestorOfType<T>(FrameworkElement child) where T : FrameworkElement 
{ 
    var parent = VisualTreeHelper.GetParent(child); 
    if (parent != null && !(parent is T)) 
     return (T)GetAncestorOfType<T>((FrameworkElement)parent); 
    return (T) parent; 
} 

Затем вы можете использовать этот метод, как это:

var itemToCancel = GetAncestorOfType<ListViewItem>(sender as Button); 
//more check to be sure if it is not null 
//otherwise there is surely not any ListViewItem parent of the Button 
if(itemToCancel != null){ 
    //... 
} 
+1

Спасибо! Протестировано и работает. Я использовал это для поиска родительского элемента пользовательского элемента управления, но не понял, что listViewItem не является прямым родителем кнопки. +1 и принято – meisenman

Смежные вопросы