Я пытаюсь сделать чрезвычайно простую, или так я думал, программу для перетаскивания файла с рабочего стола/эксплорера на просмотр деревьев wpf.
Вид дерева в этом примере прост, так что я могу изолировать проблему перетаскивания. Я установил AllowDrop равна True везде, я все еще не могу получить Drop или DragOver события, чтобы уволить. Я сосредоточен на управлении деревом, потому что я хочу быть в состоянии перетащить файлы в различные узлы с иерархической структурой. В данный момент я предпочитаю, чтобы при перетаскивании файла на просмотр дерева была возможность запускать события DragOver или Drop.
Я начал с рассмотрения таких примеров: Перетаскивание в вид дерева
Мой вопрос похож на этот: Перетащите файлы из проводника на Telerik WPF treeview. Однако я использую просмотр дерева wpf, а не телерика.
Вот код, который у меня есть на данный момент
XAML:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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 WpfDragAndDropTest
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TreeView1.ItemsSource = new[]
{
new TestClass { Title = "Google", Url = "http://www.google.com" },
new TestClass { Title = "Microsoft", Url = "http://www.microsoft.com" },
new TestClass{ Title="Netflix", Url="http://www.netflix.com" }
};
}
private void TreeView1_Drop(object sender, DragEventArgs e)
{
}
private void TreeView1_DragOver(object sender, DragEventArgs e)
{
}
private void TreeView1_MouseMove(object sender, MouseEventArgs e)
{
}
}
public class TestClass
{
public string Title { get; set; }
public string Url { get; set; }
}
}
Редактирование. Я набрал жирным шрифтом текст, в котором написано, что моя проблема в том, что события не стреляют.
Я поменял xaml на этот, и при перетаскивании файла по дереву я все еще получаю черный круг с линией через него, и единственное событие, которое срабатывает - это MouseMove. Перетаскивание не стрелять, если я использую мышь для выполнения этих действий.
Редактирование Я попробовал пустой просмотр дерева и смог перетащить по нему файл, а курсор не был черным кружком с проходящей через него линией.
Однако, когда к нему добавляется DataTemplate, именно тогда начинает появляться черный круг. Должно быть, это какая-то проблема с привязкой к базе данных?
Edit Я начинаю кое-что понимать.
Я поменял xaml на этот, и события начинают происходить:
edit Я обнаружил, что могу перетащить на стековую панель только в том случае, если запущу проект из expression blend. Если я запущу его из визуальной студии, он покажет чёрный круг с проходящей через него линией. В этом нет никакого смысла. Для этой отдельной проблемы я начал другой вопрос: Проект Visual Studio 2010 WPF, запущенный в отладке или перезагрузке, не позволит перетаскивать его на какой-либо элемент управления
Это все из-за того, что визуальная студия работает от имени администратора. Видимо то же самое относится и к notepad.exe, если вы запустили что-то от имени администратора, вы не можете перетаскивать. Так что теперь для отладки IIS мне нужно запустить от имени администратора, а для перетаскивания мне нужно придумать, как работать в обычном режиме....