2011-08-08 91 views
0

我有一系列可以在其中保存文本框的選項卡。某些選項卡也有一個包含滾動視圖內的文本框的控件。我正在嘗試遍歷標籤並清除文本框的內容。清除控件中的文本框

我打算用這樣的:

foreach(TabItem item in Tabs.Items) 
{ 
    ClearTextBoxes(this); 
} 

然後我用這清晰的文本框:

TextBox tb = obj as TextBox; 
if (tb != null) 
tb.Text = ""; 
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) 
{ 
    ClearTextBoxes(VisualTreeHelper.GetChild(obj, i)); 
} 

,目前只清理其餘的第一選項卡和無。

任何想法?

回答

1

使用LogicalTreeHelper。只有當前活動選項卡的項目包含在可視化樹中,因此可視化樹幫助程序不是您的任務的最佳選擇。

只有當您有很多其他控件不在tab項中,因此想要節省CPU電源時,對IMO選項卡進行迭代纔是IMO不必要的。正如Bela R所提到的,您在調用ClearTextBoxes()時出現錯誤。

+0

+1 - 我有很多問題與TabControl,直到我意識到只有當前選中的Tab有控件的加載。 – Rachel

+0

我將其更改爲ClearTextBoxes(Tabs),並且它適用於當前選項卡......在這種情況下,我將如何使用LogicalTreeHelper ......我並不是那麼熟悉它。 – Woundedbear

+0

@Woundedbear:以下鏈接包含一個輔助方法,它在邏輯樹和可視樹中查找。有了這個,你會發現所有的元素。我沒有測試過,但看起來沒問題。 http://www.hardcodet.net/2009/06/finding-elements-in-wpf-tree-both-ways如果我的回答對你有所幫助,請點擊答案的投票按鈕下方的複選標記,接受它。 – HCL

0

我覺得應該是ClearTextBoxes(item)而不是ClearTextBoxes(this)

foreach(TabItem item in Tabs.Items) 
{ 
    ClearTextBoxes(item); 
}