2012-07-24 165 views
0

如何通過謂詞在VisualTree中查找框架元素? 類似的東西:使用謂詞條件搜索元素

public static FrameworkElement FindChild(FrameworkElement root, Predicate<> predicate) 
{ 
    ... 
} 

我goint使用它類似的東西:

Button btn = FindChild(MainForm, element => element is Button); 

感謝您的幫助提前!

+0

你應該調用你的方法'FindSingleChild'或返回FrameworkElements的IEnumerable 。畢竟,謂詞可以由多個孩子匹配。 – Heinzi 2012-07-24 09:33:37

+0

Thx爲您提供建議。 – 2012-07-24 11:58:01

回答

1

您可以使用LINQ找出特定類型的控件,也許是這樣的:

List<Button> btns = Controls.OfType<Button>().ToList(); 
0

this SO question的回答描述了在可視樹中查找控件的很多方法。

謂詞版本在那裏給出鏈接this

1

那麼真正的問題是如何迭代給定「根」元素的所有孩子。 因爲那樣你就可以調用你的謂詞並選擇那些你想要的元素。 所以我想你應該在這裏區分兩種不同的工作流程 - 一種 - 當元素是Panel時,你應該先傳入它,然後迭代它的Children屬性並傳入其中的每一個(遞歸和非遞歸都可以工作,但你應該深入樹木,並在兩種情況下回到水平)。而在非面板元素的情況下,只需將該元素傳遞給謂詞即可。 你也應該考慮有「內容」屬性的元素(我想這是在一些基本類型中定義的,我不記得哪一個是基本類型),所以請以同樣的方式檢查內容元素。就這樣。

問候, Artak