Add to your control (or main window) declaration
AllowDrop="True" DragEnter="Window_DragEnter" Drop="Window_Drop"
In the code do something like this (this is a file drag/drop sample):
#region DragDrop
bool IsValidDropData(IDataObject draggedObj)
{
bool res = false;
IEnumerable<string> lst = draggedObj.GetData(DataFormats.FileDrop)
as IEnumerable<string>;
if (lst != null)
{
// In this sample I am only taking the first file
// the rest are ignored
string first = lst.FirstOrDefault();
if (!string.IsNullOrWhiteSpace(first))
{
FileInfo fi = new FileInfo(first);
res = fi.Exists && HasValidFileExtension(fi);
}
}
return res;
}
private bool HasValidFileExtension(FileInfo file)
{
string[] validExtensions = new[] { ".xml" };
bool res = false;
res = (file != null) && validExtensions.Contains(file.Extension);
return res;
}
private void Window_DragEnter(object sender, DragEventArgs e)
{
if (IsValidDropData(e.Data))
{
e.Effects = DragDropEffects.Copy;
}
else
{
e.Effects = DragDropEffects.None;
}
}
private void Window_Drop(object sender, DragEventArgs e)
{
if (IsValidDropData(e.Data))
{
IEnumerable<string> files = e.Data.GetData(DataFormats.FileDrop)
as IEnumerable<string>;
string fileName = files.FirstOrDefault();
if (!string.IsNullOrEmpty(fileName) &&
File.Exists(fileName))
{
DoSomethingWith(fileName);
}
}
}
#endregion DragDrop
No comments:
Post a Comment