ItemContainerGeneratorを使用すると、生成された項目のコンテナを取得し、ビジュアルツリーを下方向にトラバースしてTextBoxを見つけることができます。 ItemsControlにのケースでは、のContentPresenterになりますが、あなたがしたい場合、リストボックスは
itemsControl.ItemContainerGenerator.ContainerFromIndex(0);
を使用します。また、インデックスで、コンテナを得ることができ
ContentPresenter cp = itemsControl.ItemContainerGenerator.ContainerFromItem(item) as ContentPresenter;
TextBox tb = FindVisualChild<TextBox>(cp);
if (tb != null)
{
// do something with tb
}
public static T FindVisualChild<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)
{
return (T)child;
}
T childItem = FindVisualChild<T>(child);
if (childItem != null) return childItem;
}
}
return null;
}
ListBoxItem、リストビューのListViewItemなどを返します。
あなたは実行する必要がありますか? itemscontrolのすべての項目の中でテキストボックスを一意に識別するか、または2つだけを区別する必要がありますか? – Oskar
こんにちはオスカー itemscontrol内にはラベルとテキストボックスしかありませんでした。私はテキストボックスコントロールのハンドルを一意に(いくつかのIDを使用して)取得する方法が必要です。 itemscontrolがロードされているときにテキストボックスにフォーカスを設定する必要があり、指定された時間にフォーカスがあるテキストボックスを特定して何らかの操作を実行する必要があります。 おかげ ディーパック おかげ ディーパック – deepak
もっと単純にどのように私はC#を使用してのItemsControlコントロールコレクションを反復処理することができます。 – deepak