Çok basit bir program yapmaya çalışıyorum ya da bir dosyayı masaüstünden/explorer'dan bir wpf treeview'e sürükleyip bırakmayı düşünüyorum.WPF dosyaları Windows Gezgini'nden TreeView'e sürükleyip bırakın
Bu örnekte yer alan ağaç görünümü, sahip olduğum sürükle ve bırak problemini izole edebilmem için çok basit. AllowDrop'u her yere eşit olarak ayarladım, yine de Drop veya DragOver olaylarını tetikleyemiyorum. Treeview kontrolüne odaklandım çünkü dosyaları hiyerarşik bir yapıya sahip farklı düğümlere sürükleyebilmek istiyorum. Şu anda sadece bir dosyayı treeview üzerine sürüklediğimde DragOver veya Drop olaylarını tetikleyebildiğim için yerleşecektim.
Ben bu gibi örnekler bakarak Başladıktan adres: Drag & Drop in Treeview
Sorum olduğu benzer buna: Drag drop files from explorer onto Telerik WPF treeview. Ancak wpf treeview kullanıyorum, telerik olanı değil. İşte
Ben kodudur bugüne kadarXAML:
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
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
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; }
}
}
Düzenleme Ben olaylar olarak sorunumu dile metni kalın: Kod
<Window x:Class="WpfDragAndDropTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfDragAndDropTest"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TreeView Name="TreeView1">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}" >
<Setter Property="TreeViewItem.AllowDrop" Value="True"/>
<EventSetter Event="TreeViewItem.DragOver" Handler="TreeView1_DragOver" />
<EventSetter Event="TreeViewItem.Drop" Handler="TreeView1_Drop" />
<EventSetter Event="TreeViewItem.MouseMove" Handler="TreeView1_MouseMove" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:TestClass}">
<StackPanel Orientation="Vertical" >
<TextBlock Text="{Binding Path=Title}" />
<TextBlock Text="{Binding Path=Url}" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
</Window>
ateş etmeyin.
xaml öğesini buna aldım ve ağaç görünümü üzerinde bir dosya sürüklerken ve hareket eden tek olay MouseMove olduğunda, üzerinde siyah bir daire çiziyorum. Bu eylemleri gerçekleştirmek için fareyi kullanırsam, Sürükle ve Bırak ateşlemez.
<TreeView Name="TreeView1" AllowDrop="True" DragOver="TreeView1_DragOver" Drop="TreeView1_Drop" MouseMove="TreeView1_MouseMove">
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:TestClass}">
<StackPanel Orientation="Vertical" >
<TextBlock Text="{Binding Path=Title}" />
<TextBlock Text="{Binding Path=Url}" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
Düzenleme Ben boş ağaç çalıştı ve bunun üzerinden bir dosya sürüklemek başardı ve imleç içinden çizgi ile siyah daire değildi. bu DataTemplate buna ilave edildiğinde siyah daire gösteren başladığında
<TreeView Height="312" Background="#FFCFDBF9" AllowDrop="True"/>
Bununla birlikte, bu. Bu bir çeşit veri bağlama sorunu mu olmalı?
Düzenle Şimdi bir yere ulaşmaya başlıyorum.
Bu benim xaml değiştirdi ve olaylar ateşleme başlar:<TreeView Name="TreeView1" Background="#FFC9D7FF">
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:TestClass}">
<StackPanel Orientation="Vertical" AllowDrop="True" DragOver="TreeView1_DragOver" Drop="TreeView1_Drop" MouseMove="TreeView1_MouseMove" >
<TextBlock Text="{Binding Path=Title}" />
<TextBlock Text="{Binding Path=Url}" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
düzenlemek Ben sadece sürükle ve ifade harmanından projeyi çalıştırırsanız stackpanel düşmesi olabileceğini keşfettiler. Eğer onu görsel stüdyosundan çalıştırırsam, içinden bir çizgi olan siyah daireyi gösterir. Bu hiç mantıklı değil.Visual Studio 2010 WPF Project ran in debug or relase will not allow drag and drop to any control
Bu, tüm yönetici olarak görsel stüdyo çalışan kaynaklanır: Bu ayrı sorun için burada başka bir soru başlamıştır. Görünüşe göre aynı şey notepad.exe için doğrudur, yönetici olarak bir şey çalıştırırsanız sürükleyip bırakamazsınız. Şimdi IIS hata ayıklama için yönetici olarak çalışmam gerekiyor ve sürükleyip bırakarak normal modda nasıl çalışacağımı anlamaya ihtiyacım var ...
nasıl Hiç bu çalışma almak için hayal edersiniz? TreeView1_Drop içinde bir sorun mu var? öyleyse, neye ihtiyacınız olduğunu açıklayın ve ne denediğinizi açıklayın, DragEventArgs e nesnesinin özelliklerini kontrol etmeye başlayın ve içerdiği hata ayıklama zamanını ve ihtiyacınız olanı almak için bunları nasıl kullanabileceğinizi görün. Boş bıraktığınız diğer etkinlikler için de aynı ... –
Sorunun, ateş etmeyen olaylar olduğunu söyleyen bölümünün altını çizdim. Teşekkürler. – 249076
Bırakılan öğenin kabul öğesi değişkenini ayarlıyor ve doğruya doğru sürükleniyor mu? –