如果你不想要实现的东西比复杂的移和Move Down可以像这样处理。如果源看起来像这样
public ObservableCollection<FileClass> FileNames
{
get;
set;
}
private void moveUp_Click(object sender, RoutedEventArgs e)
{
FileClass selectedfile = listBox1.SelectedItem as FileClass;
int index = FileNames.IndexOf(selectedfile);
if (index > 0)
{
FileNames.Remove(selectedfile);
FileNames.Insert(index-1, selectedfile);
listBox1.SelectedItem = selectedfile;
}
}
private void moveDown_Click(object sender, RoutedEventArgs e)
{
FileClass selectedfile = listBox1.SelectedItem as FileClass;
int index = FileNames.IndexOf(selectedfile);
if (index < FileNames.Count-1)
{
FileNames.Remove(selectedfile);
FileNames.Insert(index + 1, selectedfile);
listBox1.SelectedItem = selectedfile;
}
}
CHANGE
试试这个代码与上下拖动移动项目和列表框
private void listBox1_Drop(object sender, DragEventArgs e)
{
ListBox parent = sender as ListBox;
FileClass data = e.Data.GetData(typeof(FileClass)) as FileClass;
FileClass objectToPlaceBefore = GetObjectDataFromPoint(parent, e.GetPosition(parent)) as FileClass;
if (data != null && objectToPlaceBefore != null)
{
int index = FileNames.IndexOf(objectToPlaceBefore);
FileNames.Remove(data);
FileNames.Insert(index, data);
listBox1.SelectedItem = data;
}
}
private void listBox1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ListBox parent = sender as ListBox;
FileClass data = GetObjectDataFromPoint(parent, e.GetPosition(parent)) as FileClass;
if (data != null)
{
DragDrop.DoDragDrop(parent, data, DragDropEffects.Move);
}
}
private static object GetObjectDataFromPoint(ListBox source, Point point)
{
UIElement element = source.InputHitTest(point) as UIElement;
if (element != null)
{
object data = DependencyProperty.UnsetValue;
while (data == DependencyProperty.UnsetValue)
{
data = source.ItemContainerGenerator.ItemFromContainer(element);
if (data == DependencyProperty.UnsetValue)
element = VisualTreeHelper.GetParent(element) as UIElement;
if (element == source)
return null;
}
if (data != DependencyProperty.UnsetValue)
return data;
}
return null;
}
这应该完成拖放内下降。
谢谢您的回答。它工作完美。对于拖放操作,我仍然在工作,因为它在同一个ListBox上,而按钮用于向上和向下,用户可以使用拖放来排列列表。 – asifabbas 2010-10-23 18:46:15
好吧,我误解了,认为你想从另一个控制中拖下去。 – 2010-10-23 18:56:36
已更新我的示例以通过拖放来重新排列列表 – 2010-10-23 20:28:24