我创建了一个带有 DataTemplate
作为 Itemtemplate
的 ListBox
。然而,在代码中有没有一种简单的方法来访问生成的 UIElement
,而不是SelectedItem
?
当我访问 SelectedItem
时,我只能得到从我的ItemsSource
集合中选择的对象。是否有一种方法可以访问UIElement
(即从DataTemplate
生成的元素与绑定的对象一起)?
我创建了一个带有 DataTemplate
作为 Itemtemplate
的 ListBox
。然而,在代码中有没有一种简单的方法来访问生成的 UIElement
,而不是SelectedItem
?
当我访问 SelectedItem
时,我只能得到从我的ItemsSource
集合中选择的对象。是否有一种方法可以访问UIElement
(即从DataTemplate
生成的元素与绑定的对象一起)?
ItemsSource
都有一个ItemContainerGenerator实例。这个类有以下可能会对你有用的方法:ContainerFromItem(object instance)。ListBoxItem
的句柄,你就可以浏览逻辑树和视觉树。查看Logical Tree Helper和Visual Tree Helper。siz、Andy和Bodeaker都是对的。
以下是我如何使用其句柄检索列表框选定项的文本框的方法。
var container = listboxSaveList.ItemContainerGenerator.ContainerFromItem(listboxSaveList.SelectedItem) as FrameworkElement;
if (container != null)
{
ContentPresenter queueListBoxItemCP = VisualTreeWalker.FindVisualChild<ContentPresenter>(container);
if (queueListBoxItemCP == null)
return;
DataTemplate dataTemplate = queueListBoxItemCP.ContentTemplate;
TextBox tbxTitle = (TextBox)dataTemplate.FindName("tbxTitle", queueListBoxItemCP);
tbxTitle.Focus();
}
var container = ListBox.ItemContainerGenerator.ContainerFromItem(ListBox.SelectedItem) as FrameworkElement; if (container != null) container.Focus();
- Bodekaer