Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
swdev:dotnet:drag_and_drop [2010/11/12 10:47] smayr created |
swdev:dotnet:drag_and_drop [2011/04/06 08:44] (current) smayr |
||
---|---|---|---|
Line 1: | Line 1: | ||
== Drag and Drop == | == Drag and Drop == | ||
+ | |||
+ | == Source Control (Drag Origin) == | ||
+ | Sample ListBox (XAML) where Drag originates: | ||
+ | <code xml> | ||
+ | <ListBox Name=" | ||
+ | | ||
+ | | ||
+ | | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Code behind: | ||
+ | <code csharp> | ||
+ | private void lstEnvironments_SelectionChanged(object sender, SelectionChangedEventArgs e) | ||
+ | { | ||
+ | string myDragData = ((ListBoxItem)lstEnvironments.SelectedItem).Content.ToString(); | ||
+ | lblSelectedEnvironment.Text = string.Format(" | ||
+ | } | ||
+ | |||
+ | private void lstEnvironments_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) | ||
+ | { | ||
+ | // Store the mouse position | ||
+ | startPoint = e.GetPosition(null); | ||
+ | } | ||
+ | |||
+ | private void lstEnvironments_MouseMove(object sender, MouseEventArgs e) | ||
+ | { | ||
+ | // Get the current mouse position | ||
+ | Point mousePos = e.GetPosition(null); | ||
+ | Vector diff = startPoint - mousePos; | ||
+ | |||
+ | if (e.LeftButton == MouseButtonState.Pressed && | ||
+ | Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance && | ||
+ | Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance) | ||
+ | { | ||
+ | // Get the dragged ListBoxItem | ||
+ | ListBox lstBox = sender as ListBox; | ||
+ | ListBoxItem lstBoxItem = FindAnchestor< | ||
+ | |||
+ | // Find the data behind the ListBoxItem | ||
+ | //string str = (string)lstBox.ItemContainerGenerator.ItemFromContainer(lstBoxItem); | ||
+ | string str = ((ListBoxItem)lstBox.SelectedItem).Content.ToString(); | ||
+ | |||
+ | // Initialize the drag & drop operation | ||
+ | DataObject dragData = new DataObject(typeof(string), | ||
+ | DragDrop.DoDragDrop(lstBoxItem, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Helper to search up the VisualTree | ||
+ | private static T FindAnchestor< | ||
+ | where T : DependencyObject | ||
+ | { | ||
+ | do | ||
+ | { | ||
+ | if (current is T) | ||
+ | { | ||
+ | return (T)current; | ||
+ | } | ||
+ | current = VisualTreeHelper.GetParent(current); | ||
+ | } | ||
+ | while (current != null); | ||
+ | return null; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | == Target Control (Drop Target) == | ||
+ | |||
+ | Target controls where Drop is performed. | ||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | <ListBox Name=" | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | | ||
+ | </ | ||
+ | <TextBox Name=" | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Code behind: | ||
+ | <code csharp> | ||
+ | private void lstAppliedEnvironment_DragEnter(object sender, DragEventArgs e) | ||
+ | { | ||
+ | if (!e.Data.GetDataPresent(" | ||
+ | { | ||
+ | e.Effects = DragDropEffects.None; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | private void lstAppliedEnvironment_Drop(object sender, DragEventArgs e) | ||
+ | { | ||
+ | if (e.Data.GetDataPresent(typeof(string))) | ||
+ | { | ||
+ | string str = e.Data.GetData(typeof(string)) as string; | ||
+ | ListBox lstBox = sender as ListBox; | ||
+ | lstBox.Items.Add(str); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | private void lblAppliedEnvironment_DragEnter(object sender, DragEventArgs e) | ||
+ | { | ||
+ | if (!e.Data.GetDataPresent(" | ||
+ | { | ||
+ | e.Effects = DragDropEffects.None; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | private void lblAppliedEnvironment_Drop(object sender, DragEventArgs e) | ||
+ | { | ||
+ | if (e.Data.GetDataPresent(typeof(string))) | ||
+ | { | ||
+ | string str = e.Data.GetData(typeof(string)) as string; | ||
+ | TextBlock lbl = sender as TextBlock; | ||
+ | lbl.Text = str; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
== Resources == | == Resources == | ||
* [[http:// | * [[http:// | ||
- | * [[http:// | + | * [[http:// |
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// |