WPF перетаскивает файлы на TreeView из проводника windows explorer

Я пытаюсь сделать чрезвычайно простую, или так я думал, программу для перетаскивания файла с рабочего стола/эксплорера на просмотр деревьев 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 мне нужно запустить от имени администратора, а для перетаскивания мне нужно придумать, как работать в обычном режиме....

6
задан Community 23 May 2017 в 12:06
поделиться