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
Post a Comment