[英]WPF drag and drop Carousel
我是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);
}
}
我在xaml文件中使用以下代碼:
<dxca:CarouselItemsControl x:Name="_carouselName"
PreviewMouseLeftButtonDown="List_PreviewMouseLeftButtonDown"
PreviewMouseMove="List_MouseMove" >
我需要獲取要拖動的對象,在示例中為contact。
// Find the data behind the ListViewItem
Contact contact = (Contact)listView.ItemContainerGenerator.ItemFromContainer(listViewItem);
任何想法?
如果您是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
幫助器方法:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.