wpf 获取列表视图中所选项目的屏幕位置

wpf get screen position of selected item in listview

在列表视图的 mouseup 事件中,如何获取所选项目的屏幕位置?我可以获得列表视图本身 (.pointtoscreen) 的屏幕位置,但找不到确定所选项目的屏幕位置的方法。

我查看了其他 SO 文章,但没有在列表视图中找到任何特定于项目的内容。

您可以处理 ListBox.SelectionChanged 事件(或 Selector.Selected)。然后获取选中项的容器,计算其坐标:

partial class MainWindow : Window
{
  private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
    var listBox = sender as ListBox;
    var selectedItemContainer = listBox.ItemContainerGenerator.ContainerFromItem(listBox.SelectedItem) as UIElement;
    var pointOnSelectedItem = new Point(); // top-left corner

    var pointOnScreen = selectedItemContainer.PointToScreen(pointOnSelectedItem);
    var pointRelativeToWindow = selectedItemContainer.TranslatePoint(pointOnSelectedItem, this);
  }
}