■72904 / inTopicNo.1) |
WPFでファイルのドラッグ&ドロップ |
□投稿者/ nobb (49回)-(2014/07/31(Thu) 17:57:04)
|
分類:[C#]
WPFでファイルをドロップしてもらい、それをZIP圧縮するというプログラムを作ろうとしています。
その際、フォルダを含めてドロップされたくないので、フォルダが含まれている場合はDragEffects.Noneに設定し、
ドロップを受け付けないようにしたいと思い「PreviewDragEnterイベント」や「DragEnterイベント」で設定しましたが、
カーソルが変更されずに分からなくなってしまいました。
WindowsFormsでは期待通りに動くので、何か初歩的なものを見落としていそうなのですがご教示下さい。
環境:Windows7、VS2013 Update2、WPF、.NET Framework4.5
期待する動作:Form(Window?)上に配置されたImageに対してドラッグされた際、フォルダが含まれている場合は○に斜線のカーソルに、
ファイルのみの場合は、コピーを行えるカーソルに変更
現状:カーソルが変わらないので、何も考えずにDragEffects.Noneに設定し、カーソルに変化があるかの実験。しかし、常にマウスカーソルに点線の四角のみのカーソル。
※関連しそうなイベントに片っ端から設定していますので、訳が分からない状態(&コピペしまくり)ですが、実験中ですのでご容赦ください。
※GiveFeedBack関連は、自分でカーソルファイルを用意し、既定以外のものを描画したいという時に使うものだとは認識してますが、
念のため書いてあります。(というか、これにブレークポイント設定してもブレークしないのはなんでだろう・・・?)
== MainWindow.xaml ==
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Background="Black" AllowDrop="True">
<Border Height="150" BorderThickness="3" BorderBrush="#FFC5BFBF">
<Image HorizontalAlignment="Center"
Height="142"
VerticalAlignment="Center"
Width="314"
Source="img/Drop.png"
AllowDrop="True"
PreviewDragEnter="Image_PreviewDragEnter"
PreviewDragOver="Image_PreviewDragOver"
PreviewDragLeave="Image_PreviewDragLeave"
PreviewDrop="Image_PreviewDrop"
PreviewGiveFeedback="Image_PreviewGiveFeedback"
GiveFeedback="Image_GiveFeedback"/>
</Border>
</Grid>
</Window>
== MainWindow.xaml.cs ==
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Image_PreviewDragEnter(object sender, DragEventArgs e)
{
System.Diagnostics.Debug.Print("PreviewDragEnter - e.Effects:{0}", e.Effects);
e.Effects = DragDropEffects.Copy;
}
private void Image_PreviewDragOver(object sender, DragEventArgs e)
{
//System.Diagnostics.Debug.Print("PreviewDragOver - e.Effects:{0}", e.Effects);
e.Effects = DragDropEffects.None;
}
private void Image_PreviewDragLeave(object sender, DragEventArgs e)
{
System.Diagnostics.Debug.Print("PreviewDragLeave - e.Effects:{0}", e.Effects);
e.Effects = DragDropEffects.None;
}
private void Image_PreviewDrop(object sender, DragEventArgs e)
{
System.Diagnostics.Debug.Print("PreviewDrop - e.Effects:{0}", e.Effects);
e.Effects = DragDropEffects.None;
}
private void Image_PreviewGiveFeedback(object sender, GiveFeedbackEventArgs e)
{
System.Diagnostics.Debug.Print("PreviewDrop - e.Effects:{0}", e.Effects);
}
private void Image_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
System.Diagnostics.Debug.Print("PreviewDrop - e.Effects:{0}", e.Effects);
}
}
}
|
|