blog sur le développement web, jquery,css3, Magento, Symphony, php et bien d'autres choses

Archives de la catégorie ‘Silverlight’

drag drop dans une liste en Silverlight

Voici le code pour executer un drag drop vers une listbox en silverlight:

xaml:

<Canvas x:Name= »LayoutRoot » Background= »White »>
<ListBox x:Name= »lb » Width= »100″ Height= »200″ SelectionChanged= »lb_SelectionChanged »>
<ListBoxItem Width= »100″ Content= »a »/>
<ListBoxItem Width= »100″ Content= »b »/>
<ListBoxItem Width= »100″ Content= »c »/>
</ListBox>
</Canvas>

Code:

private Point previousPosition;
private bool isDragging;

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
foreach (ListBoxItem item in lb.Items)
{
item.RenderTransform = new TranslateTransform();
item.MouseLeftButtonUp += new MouseButtonEventHandler(item_MouseLeftButtonUp);
item.MouseMove += new MouseEventHandler(item_MouseMove);
}
}

private void lb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBoxItem item = (ListBoxItem)lb.SelectedItem;
item.CaptureMouse();
MatrixTransform mt = (MatrixTransform)item.TransformToVisual(LayoutRoot);
previousPosition = new Point(mt.Matrix.OffsetX, mt.Matrix.OffsetY);
isDragging = true;
lb.Items.Remove(item);
LayoutRoot.Children.Add(item);
}

void item_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
ListBoxItem item = (ListBoxItem)sender;
TranslateTransform transform = (TranslateTransform)item.RenderTransform;
Point currentPosition = e.GetPosition(LayoutRoot);
transform.X += currentPosition.X – previousPosition.Value.X;
transform.Y += currentPosition.Y – previousPosition.Value.Y;
previousPosition = currentPosition;
}
}

void item_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
ListBoxItem item = (ListBoxItem)sender;
item.ReleaseMouseCapture();
isDragging = false;
}