2011-08-08 14 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を使用すべきだと思います。現在アクティブなタブの項目のみがビジュアルツリーに含まれているため、ビジュアルツリーヘルパーはあなたのタスクに最適な選択肢ではありません。

タブアイテムを繰り返し処理する必要はありません。タブアイテムに存在しない他のコントロールがたくさんあり、そのためCPUの電力を節約したい場合にのみ、IMOは不要です。 Bela Rですでに述べたように、ClearTextBoxes()への呼び出しにはエラーがあります。

+0

+1 - 私は、現在選択されているタブだけがコントロールがロードされていることに気づくまでTabControlに多くの問題がありました。 – Rachel

+0

ClearTextBoxes(タブ)に変更して、現在のタブで動作しました...この状況で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); 
} 
関連する問題