WPF拖放转盘

WPF拖放转盘,wpf,drag-and-drop,carousel,Wpf,Drag And Drop,Carousel,我是WPF的新手,我正在尝试使用旋转木马进行拖放操作 首先,我看到了一个listview示例。这个例子是:,我试过了,它是正确的 但我的问题是,当我想使用旋转木马时,我不知道当我点击我想移动的元素时,我会选择哪个项目。在本例中,此函数为: private void List_MouseMove(object sender, MouseEventArgs e) { // Get the current mouse position Point mousePos = e.GetPos

我是WPF的新手,我正在尝试使用旋转木马进行拖放操作

首先,我看到了一个listview示例。这个例子是:,我试过了,它是正确的

但我的问题是,当我想使用旋转木马时,我不知道当我点击我想移动的元素时,我会选择哪个项目。在本例中,此函数为:

private void List_MouseMove(object sender, MouseEventArgs e)
{
    // Get the current mouse position
    Point mousePos = e.GetPosition(null);
    Vector diff = startPoint - mousePos;

    if (e.LeftButton == MouseButtonState.Pressed &&
        Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance ||
        Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance )
    {
        // Get the dragged ListViewItem
        ListView listView = sender as ListView;
        ListViewItem listViewItem = 
            FindAnchestor<ListViewItem>((DependencyObject)e.OriginalSource);

        // Find the data behind the ListViewItem
        Contact contact = (Contact)listView.ItemContainerGenerator.
            ItemFromContainer(listViewItem);

        // Initialize the drag & drop operation
        DataObject dragData = new DataObject("myFormat", contact );
        DragDrop.DoDragDrop(listViewItem, dragData, DragDropEffects.Move);
    } 
}

有什么想法吗?

如果你是WPF的新手,并且你正在尝试像这样棘手的事情,那么你要么非常聪明,要么非常。。。好。。。还有别的

试着这样做:

private void ListView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    UIElement uiElement = (UIElement)e.Source;
    HitTestResult hitTestResult = VisualTreeHelper.HitTest(uiElement,  
e.GetPosition(null));
    ListBoxItem listBoxItemUnderMouse = hitTestResult.VisualHit.
GetParentOfType<ListBoxItem>();
    if (listBoxItemUnderMouse != null)
    {
        // Do your stuff here
    }
}        

在这里,您使用的是Listbox,ListBoxItem是他的项目,但我使用的是旋转木马,我的旋转木马的项目是我创建的对象。当我尝试使用GetParentOfType()时,出现了一个错误。无法转换为dependency.object。
// Find the data behind the ListViewItem
Contact contact = (Contact)listView.ItemContainerGenerator.ItemFromContainer(listViewItem);
private void ListView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    UIElement uiElement = (UIElement)e.Source;
    HitTestResult hitTestResult = VisualTreeHelper.HitTest(uiElement,  
e.GetPosition(null));
    ListBoxItem listBoxItemUnderMouse = hitTestResult.VisualHit.
GetParentOfType<ListBoxItem>();
    if (listBoxItemUnderMouse != null)
    {
        // Do your stuff here
    }
}        
public static T GetParentOfType<T>(this DependencyObject element) where T : DependencyObject
{
    Type type = typeof(T);
    if (element == null) return null;
    DependencyObject parent = VisualTreeHelper.GetParent(element);
    if (parent == null && ((FrameworkElement)element).Parent is DependencyObject) 
parent = ((FrameworkElement)element).Parent;
    if (parent == null) return null;
    else if (parent.GetType() == type || parent.GetType().IsSubclassOf(type)) return 
parent as T;
    return GetParentOfType<T>(parent);
}