This is a migrated thread and some comments may be shown as answers.

Drag and Drop freezing the application

1 Answer 86 Views
DragAndDrop
This is a migrated thread and some comments may be shown as answers.
fred
Top achievements
Rank 1
fred asked on 08 Oct 2010, 08:37 AM
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 
    
}


1 Answer, 1 is accepted

Sort by
0
Pavel Pavlov
Telerik team
answered on 13 Oct 2010, 09:40 AM
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
Tags
DragAndDrop
Asked by
fred
Top achievements
Rank 1
Answers by
Pavel Pavlov
Telerik team
Share this question
or