Sử dụng mụcContainerGenerator, bạn có thể lấy vùng chứa đã tạo cho một mục và duyệt cây nhìn xuống để tìm TextBox của bạn. Trong trường hợp của một ItemsControl nó sẽ là một ContentPresenter, nhưng một ListBox sẽ trả về một ListBoxItem, ListView một ListViewItem vv
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;
}
Bạn cũng có thể lấy các thùng chứa bằng chỉ số nếu bạn muốn bằng cách sử dụng
itemsControl.ItemContainerGenerator.ContainerFromIndex(0);
Nguồn
2009-06-12 03:43:40
Những loại thao tác làm bạn cần phải thực hiện? Bạn có cần phải xác định các hộp văn bản duy nhất trong số tất cả các mục của itemscontrol hoặc chỉ để tách hai hộp này ra khỏi nhau? – Oskar
Xin chào Oscar Tôi chỉ có nhãn và hộp văn bản bên trong mục kiểm soát của tôi. Tôi cần một cách để có được xử lý để kiểm soát hộp văn bản duy nhất (sử dụng một số id). Nhu cầu cơ bản để đặt trọng tâm vào hộp văn bản khi mục kiểm soát được tải và cần phải xác định hộp văn bản nào đã tập trung tại một thời điểm nhất định và thực hiện một số thao tác. Cảm ơn Deepak Cảm ơn Deepak – deepak
Chỉ đơn giản là làm thế nào tôi có thể lặp qua bộ sưu tập kiểm soát mục kiểm soát bằng C#. – deepak