2013-08-20 105 views
0

我是WPF中的新手,我試圖用旋轉木馬做拖放操作。WPF拖放旋轉木馬

首先,我看到了一個listview的例子。例如:http://wpftutorial.net/DragAndDrop.html,我試過了,它是正確的。

但是我的問題是,當我想要使用旋轉木馬時,我不知道當我點擊要移動的元素時選中的項目。在這個例子中是這樣的功能:

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

I'm在XAML文件中使用此代碼:

<dxca:CarouselItemsControl x:Name="_carouselName" 
            PreviewMouseLeftButtonDown="List_PreviewMouseLeftButtonDown" 
            PreviewMouseMove="List_MouseMove" > 

我需要讓我想拖動對象,在本例中是接觸。

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

任何想法?

回答

1

如果你是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 
    } 
}   

GetParentOfType是我創建了一個static extension helper方法:

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); 
} 
在此
+0

,您使用的ListBox和ListBoxItem的是他的項目,但I'm使用旋轉木馬和我的旋轉木馬的物品都是我創建的對象。當我嘗試使用GetParentOfType ()我有一個錯誤。無法轉換爲dependency.object。 – user1253414