使用代碼我可以得到一個內容主持人。我想找到它的第一個文本框,並相應地設置焦點。如何獲得ContentPresenter的子項?
Dim obj = TerritoryListViewer.ItemContainerGenerator.ContainerFromItem(myModel)
使用代碼我可以得到一個內容主持人。我想找到它的第一個文本框,並相應地設置焦點。如何獲得ContentPresenter的子項?
Dim obj = TerritoryListViewer.ItemContainerGenerator.ContainerFromItem(myModel)
您可以使用VisualTreeHelper
靜態類爬行控制樹。 這是它如何在C#來完成(對不起,我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
,那麼,是的,您使用@阿爾法鼠標建議的更全面的方法。
這適用於大多數框架元素,但不適用於ContentPresenter – 2012-03-03 02:18:35
@John:聽起來很奇怪。那麼究竟是什麼問題呢?您無法在樹中找到ContentPresenter,或找不到ContentPresenter的子項?難道當你在搜索視覺樹時還沒有構造出來? – 2012-03-05 11:50:08
@ Alpha-mouse:你懂了!我將一個元素添加到列表中,然後立即嘗試將其中一個控件集中。使用調度程序將焦點操作安排到後臺優先級解決了我的問題。 – 2012-03-07 04:54:27