C# 如果元素来自ItemSource,如何在WPF树视图中聚焦元素?

C# 如果元素来自ItemSource,如何在WPF树视图中聚焦元素?,c#,.net,wpf,binding,C#,.net,Wpf,Binding,我还可以解释这个问题,并询问如何从TreeView.Items中的模型对象中获取treevieItem 我遵循TreeView.Items集合中的treevieItems,而不是treevieItems,我拥有该模型类的对象 但是,我需要根据一些其他事件关注某些TreeView元素。如果TreeView.Items包含TreeViewItems我很容易找到一个需要的项目,并使用它的Focus()方法。但由于我现在使用绑定,我不知道如何做到这一点 当然,我可以通过添加TreeViewItems对象

我还可以解释这个问题,并询问如何从
TreeView.Items
中的模型对象中获取
treevieItem

我遵循
TreeView.Items
集合中的
treevieItems
,而不是
treevieItems
,我拥有该模型类的对象

但是,我需要根据一些其他事件关注某些
TreeView
元素。如果
TreeView.Items
包含
TreeViewItems
我很容易找到一个需要的项目,并使用它的
Focus()
方法。但由于我现在使用绑定,我不知道如何做到这一点


当然,我可以通过添加
TreeViewItems
对象以编程方式填充
TreeView
,但是我试图避免它,并采用更WPF的方式进行绑定。

您可能希望使用
ItemContainerGenerator.ContainerFromItem

TreeViewItem tvItem = (TreeViewItem)treeView
                          .ItemContainerGenerator
                          .ContainerFromItem(item);
tvItem.Focus();
请在此处找到帖子:

还有一个关于如何使用它的小示例:

XAML


代码隐藏:

    private void tv_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        var tvItem = tv.ItemContainerGenerator.ContainerFromItem(((TreeView)sender).SelectedItem);
    }
private void tv\u SelectedItemChanged(对象发送方,RoutedPropertyChangedEventArgs e)
{
var tvItem=tv.ItemContainerGenerator.ContainerFromItem(((TreeView)sender)。选择EdItem);
}
然后对您的treeview项目执行任何您想要的操作:)



这是我对TreeViewItem的风格,我将IsSelected属性绑定到模型对象的IsSelectedEditor属性。也许这不是最好的方法,但我发现它比其他解决方案更容易,而且它是现成的。因此,完成此设置后,您只需在TreeView.Items中找到您的对象,并将其IsSelectedEditor(或您选择的任何名称)属性设置为true。

谢谢!您必须将其强制转换为TreeViewItem的唯一一件事是要知道,在virtulization的情况下,容器可能为空。这控制“选择”,但不控制“焦点”。焦点没有可绑定属性。如果您在树中单击,然后以编程方式选择另一个具有此绑定的项,则您单击的项周围仍有一个浅边框,表明它仍然处于焦点状态。@SimonF我现在无法检查代码的有效性,但它可能在'11'中起作用,但在几次wpf更新之后,现在可能不起作用。
    private void tv_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        var tvItem = tv.ItemContainerGenerator.ContainerFromItem(((TreeView)sender).SelectedItem);
    }
  <Style TargetType="TreeViewItem" BasedOn="{StaticResource {x:Type TreeViewItem}}">
    <Setter Property="IsSelected" Value="{Binding IsSelectedInEditor, Mode=TwoWay}" />
  </Style>