DragOver イベントの処理で、ドラッグ中のモノがファイルかどうかを判断して、ファイルならドロップを有効にします。イベント引数 DragEventArgsの Effects プロパティを DragDropEffects.All と マウスカーソルがドロップできるアイコンになります。
e.Effects = e.Data.GetDataPresent(DataFormats.FileDrop) ?DragDropEffects.All : DragDropEffects.None;
以下のコードで、実際にファイルをドラッグアンドドロップすると、テキストブロックにファイルの内容が表示されるので、一見うまく動作しているようですが、問題点があります。
ファイル以外のモノを DragOver しても、マウスカーソルが DragDropEffects.None の形になりません。
おそらく、Window の DragOverイベントの処理のあとに、なんらかの処理がされてマウスカーソルが上書きされてしまっているようなので、DragOver イベントハンドラに次のコードを追加して、なんらかの処理をさせないようにします。
e.Handled = true;
MainWindow.xaml
<Window x:Class="DragDropTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="200" Width="300"
DragOver="Window_DragOver" Drop="Window_Drop" AllowDrop="True">
<TextBlock Name="textBlock1" />
</Window>
MainWindow.xaml.cs
using System.Windows;
namespace DragDropTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_DragOver(object sender, DragEventArgs e)
{
e.Effects = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.All : DragDropEffects.None;
}
private void Window_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] docPath = (string[])e.Data.GetData(DataFormats.FileDrop);
this.textBlock1.Text = File.ReadAllText(docPath[0]);
}
}
}
}
0 件のコメント:
コメントを投稿