Drag and Drop freezing the application

2 posts, 0 answers
  1. fred
    fred avatar
    28 posts
    Member since:
    Jun 2010

    Posted 08 Oct 2010 Link to this post

    Hi the Telerik Team !

    I'm having a strange behavior happening when I use the Drag and drop properties on items contained in a trewview.
    My point is to be able to drag and drop a treeview item (that is contained for example in a folder) into another folder of the treeview.
     Normally simple
    But when I do this, the silverlight project freezes totally, and if I close then open my widget again, it comes back still frozen, and I can't do anything else than rebooting the application.
    I can't see what's freezing the application like this. If youcan give me a clue or a solution, please.
    Here is my code.
    Thanks in advance for the help :)
    *---------------ConfigurationDragBehavior.cs-------------* 
    using System; 
    using System.Net; 
    using System.Windows; 
    using System.Windows.Controls; 
    using System.Windows.Documents; 
    using System.Windows.Ink; 
    using System.Windows.Input; 
    using System.Windows.Media; 
    using System.Windows.Media.Animation; 
    using System.Windows.Shapes; 
    using StormUI.Extensions.Inline; 
    using StormUI.Telerik.Extensions.DragAndDrop; 
    using Dashboard.Modules.Common.Objects; 
    using System.Collections.ObjectModel; 
        
    namespace ElementInformation.DragAndDropBehavior 
        public class ConfigurationDragBehavior : InlineAction, ITelerikDragAndDropBehavior 
        
            bool IsAttached = false
        
            ObservableCollection<LayoutField> Fields; 
        
            protected override void Invoke(System.Collections.Generic.List<object> Parameters) 
            
                if (Parameters.Count > 0 && Parameters[0] is ObservableCollection<LayoutField>) 
                    Fields = Parameters[0] as ObservableCollection<LayoutField>; 
            
        
            void Attach(FrameworkElement element) 
            
                if (IsAttached == true
                    return
                IsAttached = true
        
                MBinding.FillBindings(Bindings); 
                MBinding.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(MBinding_PropertyChanged); 
                MBinding.BindedElement = element; 
                MBinding.Update(); 
            
        
            #region ITelerikDragAndDropBehavior Members 
        
            public bool DragInfo(object sender, Telerik.Windows.Controls.DragDrop.DragDropEventArgs e) 
            
                Attach(sender as FrameworkElement); 
                return true
            
        
            public void DragQuery(object sender, Telerik.Windows.Controls.DragDrop.DragDropQueryEventArgs e) 
            
                Attach(sender as FrameworkElement); 
                e.QueryResult = true
            
        
            public bool DropInfo(object sender, Telerik.Windows.Controls.DragDrop.DragDropEventArgs e) 
            
                Attach(sender as FrameworkElement); 
                if (e.Options.Source.DataContext is LayoutField && e.Options.Destination.DataContext is LayoutField && Fields.Contains(e.Options.Destination.DataContext as LayoutField)) 
                
                    if (e.Options.Status != Telerik.Windows.Controls.DragDrop.DragStatus.DropComplete) 
                        return true
                    int index = Fields.IndexOf(e.Options.Destination.DataContext as LayoutField); 
                    Fields.Remove(e.Options.Source.DataContext as LayoutField); 
                    Fields.Insert(index, e.Options.Source.DataContext as LayoutField); 
                
                return false
            
        
            public void DropQuery(object sender, Telerik.Windows.Controls.DragDrop.DragDropQueryEventArgs e) 
            
                Attach(sender as FrameworkElement); 
                if (e.Options.Destination.DataContext is LayoutField && Fields.Contains(e.Options.Destination.DataContext as LayoutField)) 
                    e.QueryResult = true
            
        
            #endregion 
        
        
    *-----------------ConfigurationDropInfo.cs --------------* 
    using System; 
    using System.Linq; 
    using System.Net; 
    using System.Windows; 
    using System.Windows.Controls; 
    using System.Windows.Documents; 
    using System.Windows.Ink; 
    using System.Windows.Input; 
    using System.Windows.Media; 
    using System.Windows.Media.Animation; 
    using System.Windows.Shapes; 
    using Telerik.Windows.Controls.DragDrop; 
    using StormUI.Telerik.Extensions.DragAndDrop; 
    using System.Reflection; 
    using Hypercast.Proxy.Dashboard.Entities; 
    using Telerik.Windows.Controls.TreeView; 
    using StormUI.Extensions.Inline; 
    using System.Collections.Generic; 
    using Dashboard.Modules.Common.Objects; 
    using System.Collections.ObjectModel; 
        
    namespace ElementInformation.DragAndDropBehavior 
        public class ConfigurationDropInfo : ITelerikDragAndDropBehavior 
        
            #region ITelerikDragAndDropBehavior Members 
        
            public bool DragInfo(object sender, DragDropEventArgs e) 
            
                return true
            
        
            public void DragQuery(object sender, DragDropQueryEventArgs e) 
            
                e.QueryResult = true
            
        
        
            public bool DropInfo(object sender, DragDropEventArgs e) 
            
                TreeViewDragCue dragcue = e.Options.DragCue as TreeViewDragCue; 
        
                if (e.Options.Source.DataContext is Type) 
                    RadDragAndDropManager.CancelDrag(); 
                if (e.Options.Source.DataContext is PropertyInfo) 
                
                    PropertyInfo property = e.Options.Source.DataContext as PropertyInfo; 
                    if (e.Options.Destination.Tag as string == "SEARCH"
                    
                        bool IsSearchable = (bool)TypeGenerator.GetAttributeValue(property, TypeGenerator.SearchableAttribute).FirstOrDefault(); 
                        if (dragcue != null
                            dragcue.IsDropPossible = IsSearchable; 
                        return IsSearchable; 
                    
                    if (e.Options.Destination.Tag as string == "RESULT"
                    
                        bool IsVisible = (bool)TypeGenerator.GetAttributeValue(property, TypeGenerator.VisibleAttribute).FirstOrDefault(); 
                        if (dragcue != null
                            dragcue.IsDropPossible = IsVisible; 
                        return IsVisible; 
                    
                    if (dragcue != null
                        dragcue.IsDropPossible = true
                    return true
                
                if (dragcue != null
                    dragcue.IsDropPossible = false
                return false
            
        
            public void DropQuery(object sender, DragDropQueryEventArgs e) 
            
                TreeViewDragCue cue = e.Options.DragCue as TreeViewDragCue; 
                if (e.Options.Status == DragStatus.DropDestinationQuery) 
                    cue.IsDropPossible = true
                else
                    cue.IsDropPossible = false
                e.QueryResult = true
            
        
            #endregion 
        
        
    *------------------------ListBoxDragBehavior.cs -********************** 
    using System; 
    using System.Net; 
    using System.Windows; 
    using System.Windows.Controls; 
    using System.Windows.Documents; 
    using System.Windows.Ink; 
    using System.Windows.Input; 
    using System.Windows.Media; 
    using System.Windows.Media.Animation; 
    using System.Windows.Shapes; 
    using StormUI.Telerik.Extensions.DragAndDrop; 
    using Telerik.Windows.Controls.DragDrop; 
    using System.Collections; 
    using System.Windows.Threading; 
    using System.Reflection; 
        
    namespace ElementInformation.DragAndDropBehavior 
        public class ListBoxDragBehavior : ITelerikDragAndDropBehavior 
        
            DispatcherTimer _Timer; 
        
            public ListBoxDragBehavior() 
            
                _Timer = new DispatcherTimer(); 
                _Timer.Interval = new TimeSpan(0, 0, 0, 0, 1); 
                _Timer.Tick += new EventHandler(_Timer_Tick); 
            
        
            void _Timer_Tick(object sender, EventArgs e) 
            
                _Timer.Stop(); 
                RadDragAndDropManager.CancelDrag(); 
            
        
            #region ITelerikDragAndDropBehavior Members 
        
            public bool DragInfo(object sender, Telerik.Windows.Controls.DragDrop.DragDropEventArgs e) 
            
                if (e.Options.Status != DragStatus.DragCancel && (e.Options.Source.DataContext == null || e.Options.Source.DataContext is Type 
                    || (e.Options.Source.DataContext is PropertyInfo && typeof(IList).IsAssignableFrom((e.Options.Source.DataContext as PropertyInfo).PropertyType)))) 
                
                    _Timer.Start(); 
                
                return true
            
        
            public void DragQuery(object sender, Telerik.Windows.Controls.DragDrop.DragDropQueryEventArgs e) 
            
            
        
            public bool DropInfo(object sender, Telerik.Windows.Controls.DragDrop.DragDropEventArgs e) 
            
                return true
            
        
            public void DropQuery(object sender, Telerik.Windows.Controls.DragDrop.DragDropQueryEventArgs e) 
            
            
        
            #endregion 
        
    }


  2. Pavel Pavlov
    Admin
    Pavel Pavlov avatar
    2039 posts

    Posted 13 Oct 2010 Link to this post

    Hi fred,

    I have not found anything disturbing in your code. Maybe the problem is related to the container you are using to host the controls. You said something about "widget" are you using popups, or windows host .. or something like that  ?

    I can be in help further if you could send me your project. I will be glad to step over it locally and see what is causing the trouble.

    Kind regards,
    Pavel Pavlov
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. DevCraft banner
Back to Top