Bonjour,

J'ai réaliser un programme qui affiche des éléments graphiques (Geometry) dans une fenêtre.
Les éléments graphiques sont intégrés à mes classes de dessin et ces classes doivent être sérialisées.

Le problème que je rencontre c'est que dans ma vue, lorsque je clique sur un de mes éléments graphiques je récupère dans l'évènement MouseLeftButtonDown seulement l'objet Path, il est m'est donc impossible de manipuler directement toutes mes propriétés de la classe associée à l'objet.

J'ai donc ensuite essayé en créant une classe héritant de Shape, là en cliquant sur mon dessin j’arrivais à récupérer l'instance de ma classe, mais le problème c'est que la sérialisation ne fonctionne plus (Shape n'est pas sérialisable).

Ma classe contenant des propriétés et réalisant le dessin :
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
 
public class MyGraphicObject
{
    private Path shape;
    private GeometryGroup geometry;
    private EllipseGeometry ellipse;
 
    private double x;
    private double y;
    private int size;
    [XmlAttribute()] public double X { get; set; }
    [XmlAttribute()] public double Y { get; set; }
    [XmlAttribute()] public double Size { get; set; }
 
    public MyGraphicObject()
    {
        InitView(0, 0);
    }
    public MyGraphicObject(double x, double y)
    {
        InitView(x, y);
    }
 
    private void InitView(double x, double y)
    {
        // Var
        this.X = x;
        this.Y = y;
        this.Size = 8;
 
        // Création de la vue associée
        ellipse = new EllipseGeometry(new Point(this.X, this.Y), this.Size, this.Size);
        geometry = new GeometryGroup();
        geometry.Children.Add(ellipse);
 
        this.shape = new Path()
        {
            Stroke = Brushes.Black,
            StrokeThickness = 1,
            Fill = Brushes.Transparent,
            Data = geometry
        };
 
        Layers.LayerSelected.AddChildren(this.shape);
    }
}
Si quelqu'un a une idée je suis preneur.

Merci.