IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Serialisation d'une instance de la classe shapes.line


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut Serialisation d'une instance de la classe shapes.line
    Salut la communauté.
    Mon problème c'est que j'arrive pas à sérialiser des objets du type shapes.line, et je me demandais si il y'aurait pas un moyen d'y arriver.
    Quand j'essaie, je reçois immanquablement ce message:
    Le type 'System.Windows.Shapes.Line' dans l'assembly 'PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' n'est pas marqué comme sérialisable.
    Shapes.line n'étant pas héritable, je vois pas comment faire pour lui ajouter l'attribut <serializable>.

    Merci d'avance

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut serialiser un membre de la classe shape
    bonjour,la classe shape ancetre est un controle dote de toutes fonctionnalites de binding et d'evenements c'est un controle UI et les controles UI ne sont pas serialisables.
    if faut lui associer un classe wrapper pour stocker les proprietes des shapes et implementer cette classe comme serialisable.
    ensuite à l'utilisation :
    -on serialiase cette classe et sa liste d'objet en ecriture.
    -a la lecture on lit cette classe et sa liste ensuite on recree les shapes.

    Si tu utilise la classe Geometry oui mais elle "freezable" ( ne gere pas le binding et les evenemenements),idem pour les DrawingVisual qui supporte un seul type d'evenements (HitTest).
    bon code....

  3. #3
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    Je pense que tu peux utiliser XAMLWriter pour sérialiser les Shapes. C'est fait exprès pour les DependencyObjects.

    Ici tu auras un exemple de lecture, mais l'écriture fonctionne sensiblement pareil : http://blog.lexique-du-net.com/index...-PNG-converter...

    Bonne continuation.

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut shapes.line,shapes,heritage
    bonjour,
    Herites de shapes.shape , pas de shapes.line
    docublic NotInheritable Class Line
    Inherits System.Windows.Shapes.Shape
    Membre de System.Windows.Shapes
    Voici un exemple de classe figure rectangle ca pourrait etre une ellipse etc...
    Code vb.net : 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
     
    <Serializable()> _
    Public Class figureRectangle
        Inherits Shapes.Shape
        Dim m_largeur As Double
        Dim m_hauteur As Double
        Protected Overrides Function ShouldSerializeProperty(ByVal dp As System.Windows.DependencyProperty) As Boolean
            Return MyBase.ShouldSerializeProperty(dp)
        End Function
        Public Sub New()
        End Sub
        Public Sub New(ByVal xwidth As Double, ByVal xheight As Double)
            Me.m_largeur = xwidth
            Me.m_hauteur = xheight
        End Sub
        Public Sub New(ByVal xrect As Rect)
            Me.m_largeur = xrect.Width
            Me.m_hauteur =xrect.Height
        End Sub
        Public Property Largeur() As Double
            Get
                Return m_largeur
            End Get
            Set(ByVal value As Double)
                m_largeur = value
            End Set
        End Property
        Public Property Hauteur() As Double
            Get
                Return m_hauteur
            End Get
            Set(ByVal value As Double)
                m_hauteur = value
            End Set
        End Property
     
        Protected Overrides ReadOnly Property DefiningGeometry() As System.Windows.Media.Geometry
            Get
                Dim monRect = New Rect(0, 0, Largeur, Hauteur)
                Dim fig As System.Windows.Media.RectangleGeometry = New System.Windows.Media.RectangleGeometry
                fig.Rect = monRect
                Return fig
            End Get
        End Property
    End Class
    Voici un test dans une fenetre xaml qui utilise cette figure:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <Window x:Class="Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfAppSerialize"
        Title="Window1" Height="300" Width="300">
        <Grid Height="267" Width="284">
     
            <local:figureRectangle Largeur="20" Hauteur="20" StrokeThickness="2" Stroke="Black"  Fill="Aquamarine" Height="24" VerticalAlignment="Bottom" Margin="128,0,130,91" />
            <local:figureRectangle Largeur="20" Hauteur="20"  StrokeThickness="2" Stroke="Red" Fill="Blue" Margin="0,101,89,0" HorizontalAlignment="Right" Width="25" Height="26" VerticalAlignment="Top" />
        </Grid>
    </Window>
    bon je pense à autre chose,si c'est des figures prototopes pourquoi ne pas les creer comme des shapes normales dans un assembly de style .
    Ensuite tu en creera autant que tu veux.
    bon code...

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/11/2012, 11h25
  2. Réponses: 0
    Dernier message: 03/08/2011, 10h43
  3. Stocker une instance de la classe Tween dans un bouton
    Par chrilie dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 17/03/2009, 11h26
  4. appel d'une instance dans 2 classes différentes
    Par fennec62 dans le forum Général Python
    Réponses: 2
    Dernier message: 20/10/2008, 16h37
  5. Réponses: 5
    Dernier message: 09/03/2007, 21h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo