1
我試圖創建一個畫布,它將ListView
中的項目放到用戶需要的位置。WPF Canvas不會觸發DragEnter和Drop
畫布不會觸發我的DragEnter和Drop事件。這是我的ListView和Canvas屬性的代碼。
private void itemList_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
startPoint = e.GetPosition(null);
isDragging = true;
}
private void itemList_MouseMove(object sender, MouseEventArgs e)
{
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))
{
ListView listView = sender as ListView;
ListViewItem listViewItem =
FindAncestor<ListViewItem>((DependencyObject)e.OriginalSource);
Model.Resource student = (Model.Resource)listView.ItemContainerGenerator.
ItemFromContainer(listViewItem);
dragItem = new DDitem(student.getName(), student.getIco());
DataObject dragData = new DataObject("myFormat", dragItem);
DragDrop.DoDragDrop(listViewItem, dragData, DragDropEffects.Move);
}
}
現在爲Canvas
和ListView
我<Canvas>
private static T FindAncestor<T>(DependencyObject current) where T : DependencyObject
{
do
{
if (current is T)
{
return (T)current;
}
current = VisualTreeHelper.GetParent(current);
}
while (current != null);
return null;
}
private void can_DragEnter(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent("myFormat") || sender == e.Source)
{
e.Effects = DragDropEffects.None;
}
Console.WriteLine("Pokusava drag enter");
}
private void can_Drop(object sender, DragEventArgs e)
{
Console.WriteLine("Pokusava drop");
if (e.Data.GetDataPresent("myFormat"))
{
Model.Resource student = e.Data.GetData("myFormat") as Model.Resource;
resources.Remove(student);
isDragging = false;
}
}
我的XAML代碼如下
<Canvas Name="can" Background="Transparent" Margin="10,10,10,0" Grid.Row="1" AllowDrop="True" DragEnter="can_DragEnter" Drop="can_Drop" />
<ListView x:Name="itemList" Grid.Column="1" HorizontalAlignment="Stretch" Margin="7,23,6,0" Grid.Row="1" VerticalAlignment="Stretch" Background="#324251" ItemsSource="{Binding Path=resources}" FontSize="16" Foreground="Wheat" PreviewMouseLeftButtonDown="itemList_PreviewMouseLeftButtonDown" MouseMove="itemList_MouseMove" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ico}" Width="70" Height="70"></Image>
<TextBlock Text="{Binding name}" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
輸出沒有給出異常或錯誤。
這可能聽起來很蠢,但你可以請嘗試將畫布背景更改爲任何內容但不透明並再試一次?我記得很多年前我發生過這種事。 –
我嘗試了很多顏色,但仍然沒有運氣... – Riki