Bonjour a tous,
Je souhaiterais créer une application en C# avec WPF qui afficherais la trainé de la souris lorsque l'utilisateur clique sur la souris et bouge la souris. La trainée doit s'effacer lorsque l'utilisateur relâche le bouton de la souris.
Jusque la tout va bien je parviens a cela.
Le problème c'est que je veut que cette trainé s'affiche dans un rectangle. Or moi lors de l'affichage, il affiche la trainer sur la fentre vierge de tous composants.
Pouvez vous m'aidez s.v.p je cherche comment faire depuis 2 jours sans succès.
Je débute en WPF alors excuser mois si cela peut paraitre stupide.
Voici mon code XAML :
Et voici le code C# associé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="Projet_Musical.Window1" x:Name="Fenetre" Title="Test Ecriture" Width="721" Height="335" Visibility="Visible" Opacity="1" AllowsTransparency="False" HorizontalAlignment="Center" VerticalAlignment="Center" Icon="icone.ico" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" ResizeMode="NoResize" Background="#FF000000"> <Canvas Name="Canevas" PreviewMouseDown="Aff_MouseDown" PreviewMouseUp="Aff_MouseUp" PreviewMouseMove="Aff_MouseMove"> <Rectangle Canvas.Left="41" Canvas.Top="28" Height="235" Name="Cadre" Stroke="Black" Width="606" Fill="#FF0000FF"/> <Label Height="28" Name="label" Width="129" Canvas.Left="41" Canvas.Top="28" Background="#00D5FF00">Label</Label> </Canvas> </Window>
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.IO; using Microsoft.DirectX.AudioVideoPlayback; //using System.Windows.Forms; using System.Windows.Threading; //using System.Drawing; namespace Projet_Musical { public partial class Window1 : Window { private Boolean dessine = false; // Liste contenant tous les points de la trajectoire effectué avec le pointeur private List<System.Windows.Point> ListePoints = new List<System.Windows.Point>(); public Window1() { InitializeComponent(); } // Action lorsque le pointeur est enfoncé (mode sensoriel) private void Aff_MouseDown(object sender, MouseEventArgs e) { label.Content = "Down"; dessine = true; ListePoints.Clear(); ListePoints.Add(new Point(Mouse.GetPosition(this).X, Mouse.GetPosition(this).Y)); } // Action lorsque le pointeur est relevé (mode sensoriel) private void Aff_MouseUp(object sender, MouseEventArgs e) { label.Content = "Up"; dessine = false; } // Action lorsque le pointeur est en mouvement (mode sensoriel) private void Aff_MouseMove(object sender, MouseEventArgs e) { if (dessine == true) { label.Content = "Move"; ListePoints.Add(new System.Windows.Point(Mouse.GetPosition(this).X, Mouse.GetPosition(this).Y)); System.Windows.Shapes.Path myPath = new System.Windows.Shapes.Path(); myPath.Stroke = Brushes.Orange; myPath.StrokeThickness = 3; StreamGeometry geometry = new StreamGeometry(); geometry.FillRule = FillRule.EvenOdd; using (StreamGeometryContext ctx = geometry.Open()) { ctx.BeginFigure(ListePoints[0], true, false); for (int i = 1; i < ListePoints.Count; i++) { ctx.LineTo(ListePoints[i], true, false); } } geometry.Freeze(); myPath.Data = geometry; StackPanel mainPanel = new StackPanel(); mainPanel.Children.Add(myPath); this.Content = mainPanel; } } } }
Partager