c# - Freeze certain controls while Scaling (Render as Bitmap) -


i trying take snapshot of wpf control in various size regardless of original control size. if control size 300 px width , height, trying take snapshot in various size 1500px height , width, 100px height , width , on.

here snapshot snippet

        objframework.layouttransform =             new scaletransform(actualwidth / requiredwidth, actualheight / requiredheight);              renderbitmap = new rendertargetbitmap(requiredwidth, requiredheight, 96d, 96d, pixelformats.pbgra32);              var dv = new drawingvisual();             using (drawingcontext ctx = dv.renderopen())             {                 var vb = new visualbrush(objframework);                 ctx.drawrectangle(vb, null, new rect(0, 0, requiredwidth, requiredheight));             }              renderbitmap.render(dv); 

what looking :

i don't want few of child controls scaled. textblock inside or 1 of grid row height constant when scaling happen. sample control structure

<grid>     <border x:name="brdtiles"  verticalalignment="center" horizontalalignment="center" borderthickness="1" borderbrush="black" >         <local:gridextension x:name="grdtileholder" background="#ffffff" >             <grid.columndefinitions>                 <columndefinition width="*" />                 <columndefinition width="*" />             </grid.columndefinitions>              <grid.rowdefinitions>                 <rowdefinition height="25" />                 <rowdefinition height="*" />             </grid.rowdefinitions>               <grid grid.row="0" grid.column="1" x:name="tilecolumnheader" >                                         <grid.columndefinitions>                     <columndefinition width="100" />                     <columndefinition width="100" />                     <columndefinition width="100" />                     <columndefinition width="100" />                 </grid.columndefinitions>                 <grid.rowdefinitions>                     <rowdefinition height="25"></rowdefinition>                 </grid.rowdefinitions>                 <combobox x:name="grd1" grid.column="0" fontsize="10" height="20" >                     <comboboxitem content="item 1" />                     <comboboxitem content="item 2" />                     <comboboxitem content="item 3" />                 </combobox>                 <textblock x:name="txt1" grid.column="1" text="20" fontsize="10" height="20"/>                 <textblock x:name="txt2" grid.column="2" text="30" fontsize="10" height="20"/>                 <textblock x:name="txt3" grid.column="3" text="40" fontsize="10" height="20"/>             </grid>              <grid grid.column="0" grid.row="1"  x:name="tilerowheader" >                 <grid.rowdefinitions>                     <rowdefinition height="100" />                     <rowdefinition height="30" />                     <rowdefinition height="30" />                     <rowdefinition height="30" />                 </grid.rowdefinitions>                  <combobox horizontalalignment="center" verticalalignment="center" minwidth="100" grid.row="0" >                     <combobox.layouttransform>                         <rotatetransform angle="90" />                     </combobox.layouttransform>                     <combobox.itemspanel>                         <itemspaneltemplate>                             <stackpanel orientation="vertical" isitemshost="true">                                 <stackpanel.layouttransform>                                     <rotatetransform angle="270" />                                 </stackpanel.layouttransform>                             </stackpanel>                         </itemspaneltemplate>                     </combobox.itemspanel>                     <combobox.itemcontainerstyle>                         <style targettype="comboboxitem">                             <setter property="layouttransform">                                 <setter.value>                                     <rotatetransform angle="0" />                                 </setter.value>                             </setter>                         </style>                     </combobox.itemcontainerstyle>                     <comboboxitem>hello</comboboxitem>                     <comboboxitem>world</comboboxitem>                     <comboboxitem>foo</comboboxitem>                     <comboboxitem>check</comboboxitem>                     </combobox>               <textblock text="2" grid.row="1" />                 <textblock text="3" grid.row="2" />                 <textblock text="4" grid.row="3" />             </grid>             <grid grid.row="1" grid.column="1" margin="2" name="tileviewgrid" background="#ffffff" showgridlines="false"  horizontalalignment="center" verticalalignment="center" />         </local:gridextension>     </border> </grid> 

why want this

when take snapshot in various size, text inside looks blurry. need quality text when re-render control.

if consider changing logic loop through (traverse) whole display stack, , set rendertransform on items instead of container, maybe work;

class nonscalabletextblock : system.windows.controls.textblock {     public transform rendertransform     {                  {              return base.rendertransform;          }          set          {              // nothing         }     } } 

(so, jsut use class in place of standard textblocks when dont want scale)

it hides layouttransform property of parent, overriding nothing. reason, rendertransform worked better me layouttransform, not sure why.


Comments

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -