Wpf 单击文本区域时未选择ListViewItem
我正在使用ListView使用数据模板显示人员姓名列表: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
<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周围加一个边框。也许有帮助?