Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中ListViewItem的双击事件_C#_Wpf_Xaml_Listview_Events - Fatal编程技术网

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");
  }
}