Dot-Net
Silverlight:在佈局中查找所有類型的控制項
我正在尋找一種可靠的方法來建構包含在特定 <Panel> 派生控制項中的 <Type> 控制項列表 - 這包括那些是直接子代的控制項,以及那些是子代的子代等。
最明顯的方法是遞歸地執行此操作:
添加以列出該 <Type> 控制項的任何子項,然後對該控制項的任何子項(即 <Panel> 或後代)重複函式。
但是我擔心這不會在樹中找到所有控制項 - 任何 ContentControl 也可以包含 <Type> 控制項,HeaderedContentControl 或具有一個或多個子/內容屬性的任何其他類似控制項也可以。
是否有任何方法可以對實際的佈局樹執行搜尋,以便可以找到包含沒有特定父級的特定類型控制項的任何實例?
這是一個相當幼稚的擴展方法:-
public static class VisualTreeEnumeration { public static IEnumerable<DependencyObject> Descendents(this DependencyObject root) { int count = VisualTreeHelper.GetChildrenCount(root); for (int i=0; i < count; i++) { var child = VisualTreeHelper.GetChild(root, i); yield return child; foreach (var descendent in Descendents(child)) yield return descendent; } } }這種方法確實有一個缺點,即它假設在進行過程中樹成員資格沒有發生任何變化。這可以通過使用 ToList() 來緩解。
現在您可以使用 LINQ 實現您的要求:-
var qryAllButtons = myPanel.Descendents().OfType<Button>();