0

私は TreeViewItem をStackPanelwithimagetextblockinside にカスタマイズしました。TextBlock中身の参考になれば幸いです。以下のコードnodeはタイプのものTreeviewItemであり、childrenCound =3どれがStackPanel image textblock! TextBlockしかし、それは内部を見つけることができません。コンソール出力が表示されず、object _itemToMove戻りますnull

TreeViewItem node = UIHelper.FindVisualParent<TreeViewItem>(e.OriginalSource as FrameworkElement);
var child = VisualTreeHelper.GetChild(node, 0);
int childrenCount = VisualTreeHelper.GetChildrenCount(child);
for (int i = 0; i < childrenCount; i++)
{
    TextBlock vc = VisualTreeHelper.GetChild(child, i) as TextBlock;
    if (vc != null)
    {
        Console.WriteLine("ggggggggggggggggggggggggggggggggggggggggggggggg");

        _itemToMove = vc.Text as object;
    }

}
Console.WriteLine(childrenCount+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;");
4

2 に答える 2

1

TextBlock が思ったよりも深く埋もれている可能性があります。アプリの他の場所で使用するのに十分な汎用性のある次のヘルパーを使用して、常に成功しています。

public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
    if (obj != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        {
            var child = VisualTreeHelper.GetChild(obj, i);
            if (child is T)
            {
               return (T)child;
            }

            T childItem = FindVisualChild<T>(child);
            if (childItem != null) return childItem;
        }
    }
    return null;
}

これは、StackOverflow からの同様の質問から得たと思います。

于 2014-11-09T12:37:31.710 に答える