WPF 从动态集 ListViewItem 获取 MouseHover 事件

WPF Get MouseHover Event from dynamic set ListViewItem

如何从动态集 ListViewItems 中获取 MouseOver 事件?

XAML:

<ListView Name="ListView" x:FieldModifier="public" ItemsSource="{Binding FileDataList}" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="8" Grid.RowSpan="12">       
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Filename" DisplayMemberBinding="{Binding Name}" Width="Auto"/>
            <GridViewColumn Header="Change date" DisplayMemberBinding="{Binding Date}" Width="Auto"/>
            <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" Width="Auto"/>
            <GridViewColumn Header="Size" DisplayMemberBinding="{Binding Size}" Width="Auto"/>
        </GridView>
    </ListView.View>            
</ListView>

后面的代码:

fileDataList.Add(new FileData() { Name = System.IO.Path.GetFileNameWithoutExtension(filename), Date = File.GetLastWriteTime(filename), Type = System.IO.Path.GetExtension(filename), Size = GetFileSize(filename) });

这是列表:

public List<string> files = new List<string>();
private ObservableCollection<FileData> fileDataList = new ObservableCollection<FileData>();

ListView 的资源中设置以下样式:

 <ListView.Resources>
       <Style TargetType="ListViewItem">
          <EventSetter Event="MouseEnter" Handler="ListViewItem_MouseEnter" />
          <EventSetter Event="MouseLeave" Handler="ListViewItem_MouseLeave" />
       </Style>
 </ListView.Resources>

在后面的代码中使用以下代码来确定当前悬停的项目。

private ListViewItem _currentItem = null;
private void ListViewItem_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
    var item = sender as ListViewItem;
    if (!Equals(_currentItem, item))
    {
        _currentItem = item;

        // code to update window 
    }
}

private void ListViewItem_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
    _currentItem = null;
}