public class DragHelper : DependencyObject {
public static readonly RoutedEvent DragCompleteEvent = EventManager.RegisterRoutedEvent(
"DragComplete",
RoutingStrategy.Bubble,
typeof(DragRoutedEventHandler),
typeof(DragHelper)
);
public static void AddDragCompleteHandler(DependencyObject dependencyObject, DragRoutedEventHandler handler) {
UIElement element = dependencyObject as UIElement;
if (element != null) {
element.AddHandler(DragCompleteEvent, handler);
}
}
public static void RemoveDragCompleteHandler(DependencyObject dependencyObject, DragRoutedEventHandler handler) {
UIElement element = dependencyObject as UIElement;
if (element != null) {
element.RemoveHandler(DragCompleteEvent, handler);
}
}
Oldukça standart şeyler. XAML'de, tek bir özel denetim içeren bir DataTemplate var. Kontrolde bu olayı (yanı sıra diğer bazı ekli özellikleri) eklemek için çalışılıyor:
<DataTemplate ...>
<My:CustomControl
My:DragHelper.IsDragSource="True"
My:DragHelper.DragComplete="DragCompleteHandler" />
</DataTemplate>
Bu istenen sonuçları elde etmek için başarısız olur. Özellikle, DragComplete olayı için RaiseEvent() çağrılan kod çağrılırken, işleyici asla çağrılmaz. Aslında, bu XAML dosyasında başka bir yere bağlanan diğer özel yönlendirilmiş olayların işleyicileri de yoktur.
Ben yönlendirilmiş olayın adını değiştirerek çalıştı ve bir x ile birine bir DataType ile birinden veri şablonunu değiştirme çalıştı: Key. Bu davranışta gözle görülür bir değişiklik yaratmadı.Ancak, My değiştirirseniz: Herhangi yerleşik WPF denetimi, böyle bir TextBlock olarak, olaylar ı exect gibi aynen ateşlenir için CustomControl. Benzer şekilde, özel denetimimi projemden başka bir özel UserControl alt sınıfıyla değiştirirsem, davranış, bozuk, olaylara hiç görünmeyen ele alma durumu durumuna döner.
Bu benim için mantıklı bir sürü yapmak değildir. Bu senaryoyu işe almak için yapmam gereken belirli bir şey var mı? Önemli olmamalı gibi görünüyor. Tüm özel denetimlerimde, olay işlemenin kesilmesine neden olan belirli bir şey olabileceğini düşünüyorum, ancak şimdiye kadar denediğim üç veya dört özel denetimde ortak bir şey görmedim.
teşekkür ederiz. Benim özel denetim UserControl türetilmiş, ama seninki hala benim için problem sergiler gibi hatta TextBox onu geçiş oldu. Kodun geri kalanını ihmal ettim, çünkü bazı isim-alanı değişiklikleri dışında, temelde sizinkiyle aynı. Ancak, çok daha büyük bir projenin bir parçası olduğu için, bazı global tarz veya kaynaklarla bir çeşit etkileşim olabilir ya da sorunu etkileyebileceğinin farkında olmadığım bir şey olabilir. Ne yapabileceğimi göreceğim. –
Tamam, bu yüzden biraz kandırdım. Benim için çalıştığım tam örneğinizden başlayarak, daha büyük projemde gördüğüm işlevsel olmayan duruma dönüştürmek için çeşitli şeyler denedim. Bir süre sonra, sorunu yeniden üreten temel kodunuza çok basit bir değişiklik yaptım. DragHelper uygulamanızı alıp ana uygulama tarafından başvurulan farklı bir gruba taşıyıp Window1.xaml dosyasını buna göre değiştirirseniz (xmlns ekleyin: diğer ve kullanıcı diğer: yerel :) yerine artık ileti kutusu yangını göremiyorum metin kutusuna yazdığımda. : | –