Bonjour à tous,
J'ai un UserControl qui contient un label (le header du UserControl).
Sur ce label, j'ai déclaré les évènements MouseLeftButtonDown, MouseMove et MouseLeftButtonUp.
Dans le code du UserControl, je fait un RaiseEvent de ces évènements.
Je place ensuite mon UserControl dans ma MainWindow en lui donnant le nom "MyUserControl", je déclare les 3 évenements dans son code Xaml et je les implémente ensuite dans mon code principal afin de pouvoir déplacer mon UserControl lorsque je clique sur son label.
Cela fonctionne très bien.
Code : 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
29 private void UserControlHeader_MouseLeftButtonDown(object sender, RoutedEventArgs e) { _isDragging = true; _userControlPoint = new Point(Canvas.GetLeft(MyUserControl), Canvas.GetTop(MyUserControl)); mousePoint = new Point(Mouse.GetPosition((IInputElement)Canvas_UserControls.Parent).X, Mouse.GetPosition((IInputElement)Canvas_UserControls.Parent).Y); MyUserControl.Header.CaptureMouse(); } private void UserControlHeader_MouseMove(object sender, RoutedEventArgs e) { if (_isDragging == true) { newMousePoint = new Point(Mouse.GetPosition((IInputElement)Canvas_UserControls.Parent).X, Mouse.GetPosition((IInputElement)Canvas_UserControls.Parent).Y); Canvas.SetLeft(MyUserControl, (_userControlPoint.X + newMousePoint.X - mousePoint.X)); Canvas.SetTop(MyUserControl, (_userControlPoint.Y + newMousePoint.Y - mousePoint.Y)); } } private void UserControlHeader_MouseLeftButton(object sender, RoutedEventArgs e) { if (_isDragging == true) { _isDragging = false; MyUserControl.Header.ReleaseMouseCapture(); } }
Maintenant, sachant que j'ai plusieurs UserControl de même type dans ma mainWindow, je pensais pouvoir capitaliser ce code en réutilisant ces trois fonctions tout simplement en remplaçant dans les fonctions l'appel nominatif "MyUserControl" par _controlSender où _controlSender serait :
Et là, cela ne fonctionne plus...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private void UserControlHeader_MouseLeftButtonDown(object sender, RoutedEventArgs e) { UserControl _controlSender = (UserControl)sender; _isDragging = true; _userControlPoint = new Point(Canvas.GetLeft(_controlSender ), Canvas.GetTop(_controlSender )); // etc..... }
Quelqu'un pourrait-il m'expliquer comment procéder afin que je puisse réutiliser ces 3 fonctions pour tous mes UserControls (possédant un header de même type) plaçés dans ma MainWindow?
Je vous remercie d'avance,
Partager