WPF拖放转盘
我是WPF的新手,我正在尝试使用旋转木马进行拖放操作 首先,我看到了一个listview示例。这个例子是:,我试过了,它是正确的 但我的问题是,当我想使用旋转木马时,我不知道当我点击我想移动的元素时,我会选择哪个项目。在本例中,此函数为: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
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);
}