locked
Impression de partie clippées dans Silverlight RRS feed

  • Question

  • Bonjour,

     

    J'ai lu l'article de Petzold dans le dernier magazine MSDN (donc de mai), et il s'applique presque à mon cas de figure. Sauf que moi je ne veux pas imprimer une ellipse comme lui mais on va dire une ellipse dans une Grid. Or la Grid (mon élément racine que je ne peux pas changer pour un Canvas par ex, pour des raisons un peu longues à expliquer) cache une partie de mon ellipse si celle-ci est trop grande. Et par conséquent ce que j'imprime c'est la partie visible de l'ellipse mais pas la partie clippée.

    Donc j'aimerais savoir comment je peux faire pour, par exemple, cloner mon ellipse et l'ajouter à un Canvas. J'ai trouvé un code de clonage DeepClone (http://yinyangme.com/blog/post/Generic-class-for-deep-clone-of-Silverlight-and-C-objects.aspx) qui me permet de cloner un élément. Donc je le clone, et ca marche mais là je trouve que sa taille (ActualWidth) est nulle. Donc finalement ca ne foncionne pas ou pas comme je veux...

    Donc si vous avez des idées...

     


    Philippe
    mercredi 15 juin 2011 15:12

Réponses

  • Ok, mais encore une fois ma suggestion n'avait pas pour but de résoudre le problème mais de faire un test pour déjà comprendre si c'est inhérent au mécanisme d'impression (ce qui donc semble donc être le cas) ou au clonage.

    Egalement avoir le contexte général peut parfois aider (quand et pour quel usage récupère t'on cette valeur ?) à proposer des alternatives.

    Si l'utilisation de Measure résoud votre problème, merci de marquer votre propre réponse comme réponse pour clôturer cette question.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse PhilTheGap vendredi 17 juin 2011 11:44
    vendredi 17 juin 2011 10:56

Toutes les réponses

  • Bonjour,

    Les opérations d'impression sont faites dans quel ordre ? Je lisais hier un article SL5 qui indiquait bien que toute l'arborescence doit être créée au moment où l'on affecte le PageVisual (donc si je comprends bien affecter le Canvas au PageVisual avant d'y ajouter l'ellipse pourrait expliquer le problème, il faudrait ajouter l'ellipse au Canvas puis seulement affecter le Canvas au PageVisual)...

    Eventuellement, si le problème persiste, je ferais pour l'instant une création pure et simple via code. Cela permettrait sans doute de voir si le problème se situe au niveau du clonage ou au niveau des opérations d'impression.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 15 juin 2011 16:44
  • Bonjour Patrick,

     

    Je fais toutes mes opérations sur l'arborescence avant l'affectation au PageVisual. De toutes façons je n'ai pas de solution car j'utilise un composant Telerik qui ne peut être mis que dans une Grid (autrement ca fait des choses bizarres). Sinon la solution était de créer une arborescence identique mais en remplacant les Grid par des Canvas, et de la garder invisible. Puis d'imprimer cette arborescence (et pas la visible).

     

    Cordialement.


    Philippe
    jeudi 16 juin 2011 08:30
  • J'essaierai donc la 2ème suggestion. Le but n'est pas de résoudre le problème mais d'essayer de voir si le problème serait plutôt du côté du mécanisme d'impression (on est en Silverlight 4 ?) ou du clonage.

    Eventuellement à quel moment et pour quel usage essaie t'on de récupérer le ActualWidth (concrètement l'impression n'est pas bonne et on essaie de voir pourquoi où on veut faire qq chose en plus en récupérant le ActualWidth ?).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".



    jeudi 16 juin 2011 09:01
  • Je ne peux pas utiliser la seconde suggestion à cause du comportement du composant. Mais peu importe. Une autre alternative est d'utiliser la methode Measure, qui est celle qui calcule la taille des eléments. Extrait de l'article de Petzold:

    "

    "Almost every class that derives from FrameworkElement has non-trivial implementations of the MeasureOverride and ArrangeOverride methods for layout purposes. In its MeasureOverride method, an element determines its desired size, sometimes by determining the desired sizes of its children by calling its children’s Measure methods. In the ArrangeOverride method, an element arranges its children relative to itself by calling the children’s Arrange methods.

    When you set an element to the PageVisual property of PrintPageEventArgs, the Silverlight printing system calls Measure on that topmost element with the PrintableArea size. This is how (for example) the Ellipse or Border is automatically sized to the printable area of the page.

    However, you can also set that PageVisual property to an element that’s already part of a visual tree being displayed in the program’s window. In this case, the printing system doesn’t call Measure on that element, but instead uses the measurements and layout already determined for the video display. This allows you to print something from your program’s window with reasonable fidelity, but it also means that what you print might be cropped to the size of the page"

    Cordialement


    Philippe
    vendredi 17 juin 2011 08:30
  • Ok, mais encore une fois ma suggestion n'avait pas pour but de résoudre le problème mais de faire un test pour déjà comprendre si c'est inhérent au mécanisme d'impression (ce qui donc semble donc être le cas) ou au clonage.

    Egalement avoir le contexte général peut parfois aider (quand et pour quel usage récupère t'on cette valeur ?) à proposer des alternatives.

    Si l'utilisation de Measure résoud votre problème, merci de marquer votre propre réponse comme réponse pour clôturer cette question.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse PhilTheGap vendredi 17 juin 2011 11:44
    vendredi 17 juin 2011 10:56
  • Comme je vous l'ai indiqué, je ne vais pas chercher à trouver la réponse car je manque de temps. Je suppose juste donc qu'on peut s'en sortir avec Measure...

     

    Merci de votre aide.


    Philippe
    vendredi 17 juin 2011 11:45