2010-04-07 22 views
5

में ड्रैग/ड्रॉप रद्द कर दिया गया है, मैं सूची बॉक्स पर आधारित WPF में उपयोगकर्ता नियंत्रण लिख रहा हूं। कार्यक्षमता के मुख्य टुकड़ों में से एक आइटम को चारों ओर खींचकर सूची को पुन: व्यवस्थित करने की क्षमता है। जब कोई उपयोगकर्ता किसी आइटम को ड्रैग करता है तो मैं Opacity से 50% आइटम बदलता हूं और उपयोगकर्ता को यह देखने के आधार पर आइटम को मेरे व्यूमोडेल में ObservableCollection में स्थानांतरित करता है। ड्रॉप इवेंट पर मैं Opacity को 100% पर बदल देता हूं।मुझे कैसे पता चलेगा कि डब्ल्यूपीएफ

मुझे जो समस्या मिली है वह यह है कि यदि उपयोगकर्ता मेरे नियंत्रण से आइटम को ड्रैग करता है और उसे कहीं और छोड़ देता है तो मुझे Opacity को वापस 100% में बदलना होगा और आइटम को वापस स्थानांतरित करना होगा जब उपयोगकर्ता ने शुरू किया था खींचें क्या कोई ऐसी घटना है जिसे मैं इस क्रिया को कैप्चर करने के लिए संभाल सकता हूं? यदि इस समस्या को हल करने के लिए कोई अन्य चालाक तरीका नहीं है?

उत्तर

12

मान लें कि आप अंतर्निहित ड्रैग और ड्रॉप कार्यक्षमता का उपयोग कर रहे हैं, तो आप DoDragDrop विधि के वापसी मान का उपयोग कर सकते हैं। यदि ड्रॉप लक्ष्य ड्रैग किए गए ऑब्जेक्ट को स्वीकार नहीं करता है, तो DoDragDrop DragDropEffects.None देता है।

यह निश्चित रूप से मानता है कि आपके फॉर्म पर अन्य नियंत्रण आपकी सूची वस्तुओं को छोड़ने की अनुमति नहीं देते हैं।

+4

मैं कभी नहीं महसूस किया कि DragDrop.DoDragDrop एक अवरुद्ध फोन था चेतन होगा। ड्रॉप होने के बाद तक यह वापस नहीं आता है (सफल या अन्यथा)। बहुत उपयोगी! – Darren

+1

पवित्र बकवास +1 .... –

1

मैंने पहले XAML में ईवेंट ट्रिगर्स का उपयोग करके ऐसा किया है। मेरे मामले में, उपयोगकर्ता पारदर्शी होने से पहले पारदर्शी (30% अस्पष्टता) थे, अस्पष्टता 100% पर सेट की गई है।

<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> 

स्टोरीबोर्ड तो अस्पष्टता

<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> 
संबंधित मुद्दे