Вы можете использовать FrameworkTemplate.FindName Method (String,)
для этой цели, и он должен работать так, как вы хотите:
private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
return (childItem)child;
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
return null;
}
Затем:
private void LstBox_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ListBoxItem ListBoxItem = (ListBoxItem)(lstBox.ItemContainerGenerator.ContainerFromIndex(lstBox.SelectedIndex));
ContentPresenter contentPresenter = FindVisualChild<ContentPresenter>(ListBoxItem);
DataTemplate myDataTemplate = contentPresenter.ContentTemplate;
StackPanel temp = (StackPanel)myDataTemplate.FindName("myStackPanel", contentPresenter);
//*so as to do some further operations like make the textbox editable and so on* as you want
(temp.FindName("field1TextBox") as TextBox).IsReadOnly = false;
}
Основываясь на вашем вопросе, который вы сказали: « listbox
Он DataTemplate
состоит из немногих TextBlock
и некоторыхTextBoxes
. (Я предположил, что они находятся внутри a StackPanel
)