Utilizzando l'ItemContainerGenerator è possibile ottenere il contenitore generato per una voce e attraversare i verso il basso albero visuale per trovare il tuo TextBox. Nel caso di un ItemsControl sarà un ContentPresenter, ma un ListBox restituirà una ListBoxItem, ListView un ListViewItem, ecc
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;
}
È possibile anche ottenere il contenitore indice se si desidera utilizzando
itemsControl.ItemContainerGenerator.ContainerFromIndex(0);
fonte
2009-06-12 03:43:40
Che tipo di manipolazione fare hai bisogno di esibirti? Hai bisogno di identificare le caselle di testo in modo univoco tra tutti gli oggetti del controllo items o solo per separare i due gli uni dagli altri? – Oskar
Ciao Oscar Ho avuto solo etichette e caselle di testo all'interno del mio itemscontrol. Ho bisogno di un modo per ottenere l'handle per il controllo della casella di testo in modo univoco (usando qualche id). La necessità di base di mettere a fuoco la casella di testo quando viene caricato il controllo items e di identificare quale delle caselle di testo ha lo stato attivo in un dato momento ed eseguire alcune operazioni. Grazie Deepak Grazie Deepak – deepak
Più semplicemente come posso scorrere sulla raccolta di controllo itemscontrol utilizzando C#. – deepak