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

C# Discussion :

[WPF] Impression contenu d'une grid


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut [WPF] Impression contenu d'une grid
    Bonjour,

    J'ai une Grid qui contient un graphique.
    J'aimerais pouvoir imprimer le contenu de cette Grid par un appui sur un BP.

    Comment puis-je convertir ma grid dans un format imprimable ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    En fait j'arrive à imprimer une Grid en la mettant à la bonne échelle mais celle-ci se modifie directement dans l'UI :

    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
                        double memWidht, memHeight;
                        gridTampon = this.gdGraph;
    
                        memWidht = gridTampon.ActualWidth;
                        memHeight = gridTampon.ActualHeight;
    
    
                        //get selected printer capabilities
                        pd.PrintTicket = pd.PrintQueue.DefaultPrintTicket;
                        pd.PrintTicket.PageOrientation = System.Printing.PageOrientation.Landscape;
                        System.Printing.PrintCapabilities capabilities = pd.PrintQueue.GetPrintCapabilities(pd.PrintTicket);
    
                        //get scale of the print wrt to screen of WPF visual
                        double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / gridTampon.ActualWidth, capabilities.PageImageableArea.ExtentHeight /
                                       gridTampon.ActualHeight);
    
                        //Transform the Visual to scale
                        gridTampon.LayoutTransform = new ScaleTransform(scale, scale);
    
                        //get the size of the printer page
                        Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
    
                        //update the layout of the visual to the printer page size.
                        gridTampon.Measure(sz);
                        gridTampon.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));
    
                        //now print the visual to printer to fit on the one page.
                        pd.PrintVisual(gridTampon, "First Fit to Page WPF Print");
    Pour pallier à cela, je déclare une grid "gridTampon" qui sert juste à être redimensionnée au format de l'imprimante. Mais étrangement, même si c'est la grid tampon qui est modifiée, la grid dans mon GUI l'est aussi (this.gdGraph). Est ce que la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gridTampon = this.gdGraph;
    utilise des pointeurs ? ça expliquerait le fait qu'une modif sur la grid tampon affecte celle de ma GUI.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    En C# tout est objet tous passe par adresse. (sauf les type de bases) donc oui c'est normal.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par chaparo Voir le message
    En C# tout est objet tous passe par adresse. (sauf les type de bases) donc oui c'est normal.
    D'accord, merci pour l'info. Mais du coup est-ce possible que je fasse des modifications sur un objet tampon sans affecter l'objet d'origine ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Citation Envoyé par pitipilot Voir le message
    UP
    Tu peux cloner l'objet pour ça.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    Bonjour ,

    Je ne connaissais pas la possibilité de cloner un objet .
    En fait ma Grid contient un graphique Oxyplot
    Et quand j'essaye de cloner ma grid via ces instructions :

    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
     
                var sb = new StringBuilder();
                var writer = XmlWriter.Create(sb, new XmlWriterSettings
                {
                    Indent = true,
                    ConformanceLevel = ConformanceLevel.Fragment,
                    OmitXmlDeclaration = true,
                    NamespaceHandling = NamespaceHandling.OmitDuplicates,
                });
                var mgr = new XamlDesignerSerializationManager(writer);
     
     
                mgr.XamlWriterMode = XamlWriterMode.Expression;
     
     
                XamlWriter.Save(this.graph, mgr); //Ligne où apparait l'erreur
    J'obtiens cette erreur : "Impossible de sérialiser un type générique 'System.Collections.Generic.List`1[OxyPlot.OxyColor]'."

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Sinon j'ai trouvé d'autre exemple pour imprimer un datagrid.

    Je pense qu’il est possible de faire le redimensionnement directement au niveau du menu d'impression qu'au niveau du datagrid.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    Avec cette solution, ma grid est quand même redimensionnée

    En fait j'ai résolu mon problème d'origine en remettant ma grid à l'échelle et en "remettant ma grid dans son parent" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.gdGraph.LayoutTransform = new ScaleTransform(1, 1);
    ControlParent.Children.Remove(this.gdGraph);
     ControlParent.Children.Add(this.gdGraph);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/07/2015, 22h46
  2. [Débutant] Redimensionner le contenu d'une grid en vue d'une impression
    Par d.d.jcrn dans le forum VB.NET
    Réponses: 0
    Dernier message: 14/08/2013, 14h26
  3. Réponses: 0
    Dernier message: 16/08/2010, 14h03
  4. Réponses: 0
    Dernier message: 18/03/2010, 14h32
  5. [impression] imprimer le contenu d'une url
    Par FFF dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 30/11/2005, 15h07

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