代码之家  ›  专栏  ›  技术社区  ›  Jonathan Allen

怎样才能得到内容演示者的孩子?

wpf
  •  23
  • Jonathan Allen  · 技术社区  · 14 年前

    使用代码我可以得到一个内容演示者。我想在里面找到第一个文本框并相应地设置焦点。

    Dim obj = TerritoryListViewer.ItemContainerGenerator.ContainerFromItem(myModel)
    
    3 回复  |  直到 10 年前
        1
  •  29
  •   alpha-mouse    14 年前

    你可以用 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;
        }
    
        2
  •  9
  •   epox    8 年前

    ContentPresenter 只有一个孩子。你得到 孩子

    VisualTreeHelper.GetChild(yourContentPresenterObj, 0);
    

    如果你需要深入到 TextBox ,那么,是的,您使用@alpha mouse建议的更全面的方法。

        3
  •  3
  •   Scott Whitlock    13 年前
    Dim myContentPresenter = CType(obj, ContentPresenter)
    Dim myDataTemplate = myContentPresenter.ContentTemplate
    Dim target = CType(myDataTemplate.FindName("txtQuantity", myContentPresenter), TextBox)