WPF Impression pour ajuster la page

j'ai recherché les options de comment imprimer des contrôles WPF et a trouvé des solutions. J'ai besoin pour l'adapter à mes imprimés de contrôle de l'impression de la page tout en préservant l'aspect ratio (mon contrôle est carré; grille de sudoku).

J'ai trouvé une solution qui redimensionne et repositionne de contrôle pour s'adapter à une page. Qui fonctionne bien, mais il a également repositionne que le contrôle sur ma fenêtre.

voici le code que j'utilise pour l'impression et la mise à l'échelle :

        //get selected printer capabilities
            System.Printing.PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);
        //get scale of the print wrt to screen of WPF visual
        double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / mrizka.ActualWidth, capabilities.PageImageableArea.ExtentHeight / mrizka.ActualHeight);

        //Transform the Visual to scale
        mrizka.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.
        mrizka.Measure(sz);
        mrizka.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));

        dialog.PrintVisual(mrizka, mrizka.getID().ToString());

J'ai essayé deux aproaches pour résoudre ce problème:

  1. Clone de mon contrôle, et de transformer cloné un, unaffecting d'origine.
    Ne fonctionne pas, pour une raison que j'ai fini à l'exception Du DependencyObject n'est pas un contexte pour cette Gelé, mais curieusement, dans certains cas seulement.

  2. Revenir de taille et les changements de position. J'ai essayé d'appeler InvalidateArrange() méthode qui semble fonctionner, mais seulement lors du premier appel de la méthode d'impression. Lors du deuxième appel, il n'a pas fonctionné.

Que dois-je faire s'il vous plaît, toutes les idées< je vous remercie.

InformationsquelleAutor | 2011-10-28