Est-il possible d'avoir une fenêtre/un élément WPF détectant le drag'n'dropping d'un fichier depuis Windows Explorer en C# .Net 3.5? J'ai trouvé des solutions pour WinForms, mais aucune pour WPF.Détecter un fichier Drag'n'Drop dans WPF?
Répondre
Malheureusement, TextBox, RichTextBox et téléspectateurs FlowDocument marquent toujours des événements glisser-déposer comme manipulé, ce qui les empêche de bouillonner jusqu'à vos gestionnaires. Vous pouvez restaurer les événements glisser-déplacer interceptés par ces contrôles en gérant de force les événements glisser-déposer (utilisez UIElement.AddHandler et définissez managedEventsToo sur true) et définissez e.Handled sur false dans votre gestionnaire.
Il s'avère que je ne pouvais pas tomber sur mon TextBox pour une raison quelconque, mais tomber sur les boutons fonctionne bien. Got it travail en ajoutant « AllowDrop = « true » » à ma fenêtre et l'ajout gestionnaire d'événements goutte à bouton comprenant:
private void btnFindType_Drop(object sender, DragEventArgs e)
{
if (e.Data is System.Windows.DataObject &&
((System.Windows.DataObject)e.Data).ContainsFileDropList())
{
foreach (string filePath in ((System.Windows.DataObject)e.Data).GetFileDropList())
{
// Processing here
}
}
}
J'ai remarqué que glisser & drop dans WPF n'est pas aussi facile que cela pourrait être. Donc, je l'ai écrit un court article sur ce sujet: http://www.wpftutorial.net/DragAndDrop.html
Non, vous avez copié et collé quelqu'un d'autre article sans attribution . Voté vers le bas. –
@Nick: Je pense que c'était l'article original qui a été copié par d'autres. J'ai googlé le premier paragraphe et trouvé des résultats qui ont été pris ailleurs. –
Nick, Si vous pensez que ce n'est pas l'original, alors vous devriez dire quel est l'original. Comment peux-tu dire quelque chose sans nous montrer de preuve ??? –
les opérations suivantes:
private void MessageTextBox_Drop(object sender, DragEventArgs e)
{
if (e.Data is DataObject && ((DataObject)e.Data).ContainsFileDropList())
{
foreach (string filePath in ((DataObject)e.Data).GetFileDropList())
{
// Processing here
}
}
}
private void MessageTextBox_PreviewDragEnter(object sender, DragEventArgs e)
{
var dropPossible = e.Data != null && ((DataObject)e.Data).ContainsFileDropList();
if (dropPossible)
{
e.Effects = DragDropEffects.Copy;
}
}
private void MessageTextBox_PreviewDragOver(object sender, DragEventArgs e)
{
e.Handled = true;
}
J'ai eu problème similaire, les événements de chute et faites glisser entrer dans les événements ne sont pas tirés. Le problème était avec les paramètres de compte utilisateur Windows. Réglez-le au paramètre le moins sécurisé et essayez le même code que cela fonctionne.
À la votre! Votre idée est également discutée ici: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/a539c487-1dec-4935-b91b-c3ec252eb834 – NoizWaves