Wpf 单击文本区域时未选择ListViewItem

Wpf 单击文本区域时未选择ListViewItem,wpf,listview,datatemplate,listviewitem,Wpf,Listview,Datatemplate,Listviewitem,我正在使用ListView使用数据模板显示人员姓名列表: <Windows.Resources> <DataTemplate Datatype="{x:Type local:Person}"> <ListViewItem Content="{Binding Path=Name}"> </DataTemplates> </Windows.Resources> <ListView Name="myList" itemSo

我正在使用ListView使用数据模板显示人员姓名列表:

<Windows.Resources>
  <DataTemplate Datatype="{x:Type local:Person}">
   <ListViewItem Content="{Binding Path=Name}">
  </DataTemplates>
</Windows.Resources>
<ListView Name="myList" itemSource="{Binding}">

背后的代码是

ObservableCollection<Person> lst = SomeMethod();
myList.DataContext = lst;
observateCollection lst=SomeMethod();
myList.DataContext=lst;
listview显示了人员的姓名,但当我准确地单击姓名时,什么都没有发生(项目没有聚焦,SelectionChanged事件不起作用),但如果我在listview项目中单击姓名的右侧部分,它就会起作用

我认为是连接到datatemple的,因为当我删除模板并重写person的ToString方法以返回此名称时,它工作得很好

有什么想法吗


谢谢

您不应该在DataTemplate中使用
ListViewItem
,它是一个ContentControl,通常描述如何在ContentControl中显示内容,而不是相反:p

您的DataTemplate正在生成此(简化的)可视化树:

ListView
    ItemsPresenter
        ListViewItem
            ContentPresenter
                ListViewItem
额外的ListViewItem可能正在吞噬Click事件。相反,使用类似于TextBlock的东西来显示文本,常规的ListViewItem行为应该可以正常工作

<DataTemplate Datatype="{x:Type local:Person}">
    <TextBlock Text="{Binding Path=Name}">
</DataTemplates>

您不应该在DataTemplate中使用
ListViewItem
,它是一个ContentControl,通常描述如何在ContentControl中显示内容,而不是相反:p

您的DataTemplate正在生成此(简化的)可视化树:

ListView
    ItemsPresenter
        ListViewItem
            ContentPresenter
                ListViewItem
额外的ListViewItem可能正在吞噬Click事件。相反,使用类似于TextBlock的东西来显示文本,常规的ListViewItem行为应该可以正常工作

<DataTemplate Datatype="{x:Type local:Person}">
    <TextBlock Text="{Binding Path=Name}">
</DataTemplates>


尝试在模板中的ListViewItem周围添加边框。也许这会有帮助?试着在模板中的ListViewItem周围加一个边框。也许有帮助?