代码之家  ›  专栏  ›  技术社区  ›  Joachim Kerschbaumer

WPF列表框-获取uielement而不是selecteditem

  •  12
  • Joachim Kerschbaumer  · 技术社区  · 15 年前

    我创造了一个 ListBox 那有 DataTemplate 作为 Itemtemplate . 但是,是否有一种简单的方法可以访问生成的 UIElement 而不是 SelectedItem 在密码后面?

    当我进入 选择项目 ,我只是从我的 ItemsSource 收集。有办法进入 铀元素 (I. 元素生成自 数据板 与绑定对象一起?

    2 回复  |  直到 11 年前
        1
  •  13
  •   Dave Clemmer manu    11 年前

    你在找 ItemContainerGenerator 财产。各 ItemsSource 有一个 ItemContainerGenerator 实例。此类具有以下可能使您感兴趣的方法: ContainerFromItem(object instance) .

    一旦你掌握了 ListBoxItem ,您可以继续浏览逻辑和可视树。退房 Logical Tree Helper Visual Tree Helper .

    正如安迪在评论中所说,仅仅因为你的收藏中存在这个项目并不意味着已经为它生成了一个容器。任何类型的虚拟化面板场景都会引发这个问题;uielements将在不同的项目中重用。也要小心。

        2
  •  4
  •   vamosrafa    11 年前

    锡兹 , 安迪 博迪克 是绝对正确的。

    以下是我如何使用列表框的句柄检索列表框所选项目的文本框。

    var container = listboxSaveList.ItemContainerGenerator.ContainerFromItem(listboxSaveList.SelectedItem) as FrameworkElement;
    if (container != null)
    {
        ContentPresenter queueListBoxItemCP = VisualTreeWalker.FindVisualChild<ContentPresenter>(container);
        if (queueListBoxItemCP == null)
            return;
    
        DataTemplate dataTemplate = queueListBoxItemCP.ContentTemplate;
    
        TextBox tbxTitle = (TextBox)dataTemplate.FindName("tbxTitle", queueListBoxItemCP);
        tbxTitle.Focus();
    }
    

    (注意:在这里,VisualTreeWalker是我在VisualTreeHelper上的一个包装器,它公开了各种有用的功能)

    推荐文章