Используя код, я могу получить презентацию контента. Я хотел бы найти первое текстовое поле внутри него и соответственно настроить фокус.
Dim obj = TerritoryListViewer.ItemContainerGenerator.ContainerFromItem(myModel)
Используя код, я могу получить презентацию контента. Я хотел бы найти первое текстовое поле внутри него и соответственно настроить фокус.
Dim obj = TerritoryListViewer.ItemContainerGenerator.ContainerFromItem(myModel)
Вы можете использовать статический класс VisualTreeHelper
для обхода элементов управления обходами.
Вот как это можно сделать в С# (извините, что я дисбаланс VB))
T FindFirstChild<T>(FrameworkElement element) where T: FrameworkElement
{
int childrenCount = VisualTreeHelper.GetChildrenCount(element);
var children = new FrameworkElement[childrenCount];
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(element, i) as FrameworkElement;
children[i] = child;
if (child is T)
return (T)child;
}
for (int i = 0; i < childrenCount; i++)
if (children[i] != null)
{
var subChild = FindFirstChild<T>(children[i]);
if (subChild != null)
return subChild;
}
return null;
}
Dim myContentPresenter = CType(obj, ContentPresenter)
Dim myDataTemplate = myContentPresenter.ContentTemplate
Dim target = CType(myDataTemplate.FindName("txtQuantity", myContentPresenter), TextBox)
ContentPresenter
имеет единственный ребенок. Вы получаете ребенка просто
VisualTreeHelper.GetChild(yourContentPresenterObj, 0);
Если вам нужно пойти глубже - до , сначала найдено TextBox
, тогда да, вы используете более полный подход, предложенный @alpha-mouse.