wpf - Draw large DrawingVisual in Windows Forms -


background

i have large report in winforms application generated wpf drawingvisual. want display report in separate resizable window enables users scroll up/down read it. in case report doesn't have page breaks , consist of 1 large page.

first attempt:

use customized documentviewer display report.

added drawingvisual fixeddocument custom height, added fixeddocument fixeddocumentsequence , passed document sequence print preview window (that uses custom documentviewer).

var previewwindow = new reportprintpreview(docseq); previewwindow.show(); 

classes:

public class reportprintpreview : window {    private readonly documentviewer docviewer;     public reportprintpreview(idocumentpaginatorsource doc)    {       docviewer = new customdocumentviewer();       docviewer.document = doc;    }     protected override void oninitialized(eventargs e)    {       base.oninitialized(e);       addchild(docviewer);    } }  public class customdocumentviewer : documentviewer {    public customdocumentviewer()    {       showpageborders = false;    }     protected override void onprintcommand()    {    } } 

this works , gives performance large reports, find customization possibilities of documentviewer limiting. want add combo boxes in toolbar , control zoom of report when window resized example.

second attempt:

use regular windows forms form , draw drawingvisual using elementhost. element host placed inside panel enable scrolling.

var form = new reportviewer(visual, psize); form.showdialog(); 

classes:

public partial class reportviewer : system.windows.forms.form {     public reportviewer(drawingvisual visual, size size)    {       initializecomponent();        var wpfpanel = new wpfdrawingusercontrol(visual);       elementhost1.width = size.width;       elementhost1.height = size.height;       elementhost1.child = wpfpanel;    } }  public class wpfdrawingusercontrol : system.windows.controls.usercontrol {    public wpfdrawingusercontrol(drawingvisual visual)    {       var image = new image();       image.source = new drawingimage(visual.drawing);       content = image;    } } 

i create usercontrol contains image created drawinggroup of drawingvisual.

this kind of works, performance when scrolling bad. , crashes when report large enough.

solution?

how can more effective drawing of drawingvisual in form? guess whole drawingvisual painted in usercontrol when part of report showing in scroll enabled panel.

alternatively, how can customize documentviewer or create own wpf control display drawingvisual.


Comments

Popular posts from this blog

html - How to style widget with post count different than without post count -

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

javascript - storing input from prompt in array and displaying the array -