天天看點

WPF滑鼠拖放功能(拖放圖檔,文本)

      對于拖放操作有兩個方面:源和目标。為了建立拖放源,需要在某個位置調用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接口。