xaml - WPF GroupBox header Alignment issue -
how can align groupbox header center rather default left positioning.
i read in many post 1 can use template have no idea such thing. please let me know how can header @ center.
thanks !!
yes, you'll have modify template.
for center-alignment see this answer thomas levesque
right-alignment see this answer mihir gokani
uploaded sample project containing both center-alignment , right-alignment here: http://www.mediafire.com/?hd2vbwr97ep7yis
center-alignment using same approach thomas
usable this
<groupbox header="centered header" style="{staticresource centeredheadergroupboxstyle}" .../>
centeredheadergroupboxstyle
<local:centerbordergapmaskconverter x:key="centerbordergapmaskconverter"/> <style x:key="centeredheadergroupboxstyle" targettype="{x:type groupbox}"> <setter property="borderbrush" value="#d5dfe5"/> <setter property="borderthickness" value="1"/> <setter property="template"> <setter.value> <controltemplate targettype="{x:type groupbox}"> <grid snapstodevicepixels="true"> <grid.columndefinitions> <columndefinition width="6"/> <columndefinition width="auto"/> <columndefinition width="*"/> <columndefinition width="6"/> </grid.columndefinitions> <grid.rowdefinitions> <rowdefinition height="auto"/> <rowdefinition height="auto"/> <rowdefinition height="*"/> <rowdefinition height="6"/> </grid.rowdefinitions> <border borderbrush="transparent" borderthickness="{templatebinding borderthickness}" background="{templatebinding background}" grid.columnspan="4" grid.column="0" cornerradius="4" grid.row="1" grid.rowspan="3"/> <border grid.zindex="2" x:name="header" grid.column="2" horizontalalignment="center" padding="3,1,3,0" grid.row="0" grid.rowspan="2"> <contentpresenter contentsource="header" recognizesaccesskey="true" snapstodevicepixels="{templatebinding snapstodevicepixels}"/> </border> <contentpresenter grid.columnspan="2" grid.column="1" margin="{templatebinding padding}" grid.row="2" snapstodevicepixels="{templatebinding snapstodevicepixels}"/> <border rendertransformorigin="0.5,0.5" borderbrush="white" borderthickness="{templatebinding borderthickness}" grid.columnspan="4" cornerradius="4" grid.row="1" grid.rowspan="3"> <border.opacitymask> <multibinding converterparameter="7" converter="{staticresource centerbordergapmaskconverter}"> <binding elementname="header" path="actualwidth"/> <binding path="actualwidth" relativesource="{relativesource self}"/> <binding path="actualheight" relativesource="{relativesource self}"/> </multibinding> </border.opacitymask> <border borderbrush="{templatebinding borderbrush}" borderthickness="{templatebinding borderthickness}" cornerradius="3"> <border borderbrush="white" borderthickness="{templatebinding borderthickness}" cornerradius="2"/> </border> </border> </grid> </controltemplate> </setter.value> </setter> </style>
centerbordergapmaskconverter
class centerbordergapmaskconverter : imultivalueconverter { // methods public object convert(object[] values, type targettype, object parameter, cultureinfo culture) { type type = typeof(double); if (values == null || values.length != 3 || values[0] == null || values[1] == null || values[2] == null || !type.isassignablefrom(values[0].gettype()) || !type.isassignablefrom(values[1].gettype()) || !type.isassignablefrom(values[2].gettype())) { return dependencyproperty.unsetvalue; } double pixels = (double)values[0]; double width = (double)values[1]; double height = (double)values[2]; if ((width == 0.0) || (height == 0.0)) { return null; } grid visual = new grid(); visual.width = width; visual.height = height; columndefinition coldefinition1 = new columndefinition(); columndefinition coldefinition2 = new columndefinition(); columndefinition coldefinition3 = new columndefinition(); coldefinition1.width = new gridlength(1.0, gridunittype.star); coldefinition2.width = new gridlength(pixels); coldefinition3.width = new gridlength(1.0, gridunittype.star); visual.columndefinitions.add(coldefinition1); visual.columndefinitions.add(coldefinition2); visual.columndefinitions.add(coldefinition3); rowdefinition rowdefinition1 = new rowdefinition(); rowdefinition rowdefinition2 = new rowdefinition(); rowdefinition1.height = new gridlength(height / 2.0); rowdefinition2.height = new gridlength(1.0, gridunittype.star); visual.rowdefinitions.add(rowdefinition1); visual.rowdefinitions.add(rowdefinition2); rectangle rectangle1 = new rectangle(); rectangle rectangle2 = new rectangle(); rectangle rectangle3 = new rectangle(); rectangle1.fill = brushes.black; rectangle2.fill = brushes.black; rectangle3.fill = brushes.black; grid.setrowspan(rectangle1, 2); grid.setrow(rectangle1, 0); grid.setcolumn(rectangle1, 0); grid.setrow(rectangle2, 1); grid.setcolumn(rectangle2, 1); grid.setrowspan(rectangle3, 2); grid.setrow(rectangle3, 0); grid.setcolumn(rectangle3, 2); visual.children.add(rectangle1); visual.children.add(rectangle2); visual.children.add(rectangle3); return new visualbrush(visual); } public object[] convertback(object value, type[] targettypes, object parameter, cultureinfo culture) { return new object[] { binding.donothing }; } }
Comments
Post a Comment