C# WPF中ListViewItem的双击事件
我知道这已经被问了很多,但我没有找到任何解决办法 我的C# WPF中ListViewItem的双击事件,c#,wpf,xaml,listview,events,C#,Wpf,Xaml,Listview,Events,我知道这已经被问了很多,但我没有找到任何解决办法 我的ListView如下所示 <ListView Margin="0,0,0,0" x:Name="ContactListView" BorderBrush="Black" ItemsSource="{Binding RosterItemX}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orien
ListView
如下所示
<ListView Margin="0,0,0,0" x:Name="ContactListView" BorderBrush="Black" ItemsSource="{Binding RosterItemX}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="25">
<Image Tag="{Binding Availability}" Margin="0,0,5,0" Width="16" Height="16" VerticalAlignment="Center">
</Image>
<TextBlock Text="{Binding Name}" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<Custom:EventToCommand Command="{Binding ContactDblClicked, Mode=OneWay}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
每当有人双击列表视图时,此事件就会触发。不必位于列表视图项上
我可以处理未选择任何ListViewItem
的情况。
我播放(ListView)e.Source
,并检查是否选择了某个项目
我需要一种方法来检查双击的内容是否实际上是一个ListViewItem
而不是空的空间。不完全确定您最后一行的意思。我需要一种方法来检查双击的内容是否实际上是一个ListViewItem而不是空的空间。但这里有两个建议:
首先,如果要检查是否在列表视图中选择了某个项目
:
private void contactDblClicked(MouseButtonEventArgs obj)
{
var listView = obj.Source as ListView;
if (listView != null)
{
if (listView.SelectedItem != null)
{
Debug.WriteLine("item selected");
}
else
{
Debug.WriteLine("item not selected");
}
}
}
但是,我认为您已经得到了解决方案,如果我正确理解您的问题,您希望检查用户是否确实单击了某个项目(而不是空格),即使选择了某个项目
下面是第二种检查项目是否被点击的方法:
private void contactDblClicked(MouseButtonEventArgs obj)
{
if (((FrameworkElement) obj.OriginalSource).DataContext is YourRosterItemXType)
{
Debug.WriteLine("item was *really* clicked");
}
}
其中,YourRosterItemXType
是绑定的RosterItemX
属性的类型。使用上述代码,您可以检查鼠标事件原始源的DataContext
是否设置为YourRosterItemXType
。ListView
中的项设置了DataContext
,因此您可以检查鼠标事件是否确实来自这些列表项之一
private void contactDblClicked(MouseButtonEventArgs obj)
{
if (((FrameworkElement) obj.OriginalSource).DataContext is YourRosterItemXType)
{
Debug.WriteLine("item was *really* clicked");
}
}