WPF

2010-04-07 16 views
5

'de bir sürükle/bırak işleminin iptal edilip edilmediğini nasıl öğrenebilirim WPF'de bir kullanıcı denetimine dayalı bir kullanıcı denetimi yazıyorum. Temel işlevsellik özelliklerinden biri, öğeleri sürükleyerek listeyi yeniden sıralamaktır. Bir kullanıcı bir öğeyi sürüklediğinde, Opacity öğelerini% 50 olarak değiştirir ve öğenin, kullanıcının istediği yere bağlı olarak ViewModel öğesindeki bir ObservableCollection öğesinde fiziksel olarak hareket ettirir. Düşme olayında Opacity'u% 100'e geri değiştiriyorum.WPF

Kullanmakta olduğum sorun, kullanıcı öğeyi kontrolümden kaldırır ve başka bir yere düşürürse, Opacity'u% 100'e geri döndürmem ve öğeyi, kullanıcının başladığında olduğu yere geri götürmesi gerektiğidir. sürükleyin. Bu eylemi yakalamak için kullanabileceğim bir etkinlik var mı? Eğer bu sorunu çözmek için başka bir kurnaz yolu yok mu?

cevap

12

Yerleşik sürükle ve bırak işlevini kullandığınızı varsayarak, DoDragDrop yönteminin dönüş değerini kullanabilirsiniz. Bırakılan hedef sürüklenen nesneyi kabul etmezse, DoDragDrop, DragDropEffects.None değerini döndürür.

Bu, formunuzdaki diğer denetimlerin, liste öğelerinizin düşmesine izin vermediğini varsayar.

+4

Opaklık animasyon olacaktır. Düşme gerçekleşene kadar (başarılı veya başka bir şekilde) geri dönmez. Çok kullanışlı! – Darren

+1

Kutsal saçmalık +1 .... –

1

Bunu daha önce XAML'de etkinlik tetikleyicileri kullanarak yaptım. Benim durumumda, kullanıcı daha önce şeffaflık geçirdiyse (% 30 opaklık), opaklık% 100 olarak belirlendi.

<EventTrigger RoutedEvent="DragDrop.DragEnter"> 
    <BeginStoryboard Storyboard="{StaticResource FadeInStoryboard}" x:Name="FadeInStoryboard_BeginStoryboard1"/> 
</EventTrigger> 
<EventTrigger RoutedEvent="DragDrop.DragLeave"> 
    <BeginStoryboard Storyboard="{StaticResource FadeOutStoryboard}" x:Name="FadeOutStoryboard_BeginStoryboard1"/> 
</EventTrigger> 

sahne çizimleri ben DragDrop.DoDragDrop bir engelleme çağrısı olduğunu fark asla

<Storyboard x:Key="FadeInStoryboard"> 
    <DoubleAnimation To="1" Duration="0:00:00.2" Storyboard.TargetName="UserControl" Storyboard.TargetProperty="(UIElement.Opacity)" /> 
</Storyboard> 
<Storyboard x:Key="FadeOutStoryboard"> 
    <DoubleAnimation To="0.3" Duration="0:00:00.2" Storyboard.TargetName="UserControl" Storyboard.TargetProperty="(UIElement.Opacity)" /> 
</Storyboard>