我想獲得給定頁面上給定類型的所有控件的列表,但我遇到了問題。看來,VisualTreeHelper可能只會返回已加載的控件?我試圖關閉虛擬化,但這似乎沒有幫助。任何人都可以想出另一種方式來獲得所有的控制,或者可能強制加載UI,以便下面的方法起作用嗎?WPF - 獲取頁面上給定類型的所有控件的集合?
我借這個從MSDN:
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
是否使用'FlowDocuments ''等'在'頁面? –
沒有。只是一系列UIElements。我遇到的真正問題是從我的TabControl獲取特定的控件。只有第一個TabItem似乎返回任何東西。我假設在頁面的Load事件期間調用代碼時出現虛擬化問題,並且只有第一個TabItem是「可見的」。 –
我懷疑'TabControl'可能會重複使用'TabItem'模板,只是在切換標籤頁時更改其內容。如果您更改標籤,是否還有另一套控件? –