繁体   English   中英

如何在WPF中获取TreeViewItem的内容?

[英]How I can get content of TreeViewItem in WPF?

例如,我的TreeViewItem的标题包含TextBlock和Image。 我如何获得对它们的引用?

我不确定我是否正确,但是如果要获取某个元素的可视子级,请尝试使用VisualTreeHelper.GetChildVisualTreeHelper.GetChildrenCount

PS:通常,获取对TreeViewItem本身的引用更成问题...

UPDATE(后代的代码示例):

private IEnumerable<DependencyObject> GetChildren(DependencyObject parent)
{
    var count = VisualTreeHelper.GetChildrenCount(parent);
    if (count > 0)
    {
        for (int i = 0; i < count; i++)
            yield return VisualTreeHelper.GetChild(parent, i);
    }
    else
        yield break;
}

private DependencyObject FindInTheVT(DependencyObject parent,Predicate<DependencyObject> predicate)
{
    IEnumerable<DependencyObject> layer = GetChildren(parent);

    while (layer.Any())
    {
        foreach (var d in layer)
            if (predicate(d)) return d;

        layer = layer.SelectMany(x => GetChildren(x));
    }

    return null;
}

如果您有类似内容(使用Xaml或代码创建):

TreeViewItem Item = new TreeViewItem();

StackPanel HeaderLayout = new StackPanel() { Orientation = Orientation.Horizontal };

HeaderLayout.Children.Add(new Image());
HeaderLayout.Children.Add(new TextBlock() { Text = "tv item" });

Item.Header = HeaderLayout;

您可以使用类似:

foreach (object Control in ((StackPanel)Item.Header).Children)
{
    if (Control is Image)
    {
        //get the image control: Image img = (Image)Control;
    }
    else if (Control is TextBlock)
    {
        //get the textblock: TextBlock tb = (TextBlock)Control;
    }
}

我不建议这样做。 如果创建一个自定义标头(一个包含Image和TextBlock属性的类)并将其分配给标头或自定义模板会更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM