salut à tous
- le controle ListBox nous permet un Binding sur ObservablleCollection
- un Canvas nous permet de placer des Items suivant X,Y
- un Thumb est sensible à l'évenement Drag'nDrop
- je crois que (entre autre) "MITSU" qui a développé un truc semblable
j'ai bien réutiliser le XAML suivant (merci google) :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <ListBox Grid.Row="1" Name="listBox1" HorizontalAlignment="Left" Width="526" IsSynchronizedWithCurrentItem="True"> <ItemsControl.ItemTemplate> <DataTemplate> <Thumb DragDelta="onDragDelta" Width="30" Height="30"> </Thumb> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <Canvas/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ListBox.ItemContainerStyle> <Style> <Setter Property="Canvas.Left" Value="{Binding Path=x }" /> <Setter Property="Canvas.Top" Value="{Binding Path=y}" /> </Style> </ListBox.ItemContainerStyle> </ListBox>
et en code behind :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public void onDragDelta(object sender, DragDeltaEventArgs e) { Thumb myElm = new Thumb(); myElm = sender as Thumb; //le thumb change bien de couleur il est bien détecté : myElm.Background = Brushes.Black; //Move the Thumb : double left = Canvas.GetLeft(myElm); double top = Canvas.GetTop(myElm); Canvas.SetLeft(myElm, left + e.HorizontalChange); Canvas.SetTop(myElm, top + e.VerticalChange); }
je Bind mon ListBox avant tout ça:
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //Mylist est aussi liée à un Datagrid et tout se passe bien this.listBox1.ItemsSource = Mylist;
le Problème est que les Items sont bien affichés selon leur coordonnées dans ma nouvelle ListBox, mais le DragDrop ne marche pas rien ne bouge!!
j'ai crée un canvas(en dehore de la ListBox) contenant un Thumb avec une assignation direct de coordonnées
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <Canvas Height="113" HorizontalAlignment="Left" Margin="227,12,0,0" Background="Azure" Name="canvas1" VerticalAlignment="Top" Width="463"> <Thumb Name="mythamb" DragDelta="onDragDelta" Canvas.Left="10" Canvas.Top="10" Width="30" Height="30"> </Thumb> </Canvas>
et là mon Thumb bouge.
mais dans le cas des items thumb dans ma ListBox sa ne marche pas, alors en plaçant un point d’arrêt dans la Méthode : onDragDelta je remarque que les variable left et top sont à "NAN" ....alors que les Items ont leurs assignation via un Binding qui les place bien dans le canvas :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <ListBox.ItemContainerStyle> <Style> <Setter Property="Canvas.Left" Value="{Binding Path=x }" /> <Setter Property="Canvas.Top" Value="{Binding Path=y}" /> </Style> </ListBox.ItemContainerStyle>
c'est un contrôle très utile pour tous ...des idées?
comment il a fait (MITSU)??
Partager