2014-10-01 96 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 2014-10-01 16:43:53

相關問題