對于拖放操作有兩個方面:源和目标。為了建立拖放源,需要在某個位置調用DragDrop.DoDragDrop()方法初始化拖放操作。此時确定拖動操作的源,擱置希望移動的内容,并指明充許什麼樣的拖放效果(複制,移動等)。
通常會在響應PreviewMouseDown或MouseDown事件時,調用DoDragDrop()方法。
而接收的元素需要将它的AllowDrop屬性設定為true,還需要通過處理Drop事件來處理資料。
前台代碼:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Name="source" Grid.Row="0" Background="Purple" Foreground="White" MouseDown="source_MouseDown">部落格園:www.cnblogs.com</TextBox>
<Image Source="http://static.cnblogs.com/images/logo_small.gif" Grid.Column="1" Stretch="None" MouseDown="Image_MouseDown"></Image>
<Label Name="target" Grid.Row="1" Background="YellowGreen" AllowDrop="True" Drop="OnDrop">文本拖到這裡</Label>
<Image Name="targetImg" Grid.Row="1" Grid.Column="1" AllowDrop="True" Drop="targetImg_Drop_1" Stretch="None" Source="http://www.baidu.com/img/baidu_sylogo1.gif"></Image>
</Grid>
背景代碼:
/// <summary>
/// 文本源資料
/// </summary>
private void source_MouseDown(object sender, MouseButtonEventArgs e)
{
TextBox objText = sender as TextBox;
DragDrop.DoDragDrop(objText, objText, DragDropEffects.Copy);
}
/// <summary>
/// 圖檔源資料
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
Image objImage = sender as Image;
DragDrop.DoDragDrop(objImage, objImage.Source, DragDropEffects.Copy);
/// 目标位置
private void OnDrop(object sender, DragEventArgs e)
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effects = DragDropEffects.Copy;
else
return;
this.target.Content = e.Data.GetData(DataFormats.Text);
private void targetImg_Drop_1(object sender, DragEventArgs e)
e.Data.GetFormats();
if (e.Data.GetDataPresent("System.Windows.Media.Imaging.BitmapFrameDecode"))
{
}
// targetImg.Source = (ImageSource)e.Data.GetData("System.Windows.Media.Imaging.BitmapFrameDecode");
((Image)sender).Source = (ImageSource)e.Data.GetData("System.Windows.Media.Imaging.BitmapFrameDecode");
如果不知道拖放源資料是什麼資料類型,可以使用實作了IDataObject接口的GetFormats()方法。如: e.Data.GetFormats(); 其中Data就實作了IDataObject接口。