windows phone 7 - Custom ListBox control does not allow scrolling -
i build logger control on top of listbox , having difficulty getting logger work (i.e. listbox scrolling). here code using:
style definition in resource dictionary:
<style targettype="local:logger"> <setter property="itemtemplate"> <setter.value> <datatemplate> <border x:name="layoutroot"> <grid> <grid.columndefinitions> <columndefinition width="auto"/> <columndefinition width="*"/> </grid.columndefinitions> <textblock grid.column="0" text="{binding head}" margin="4"/> <textblock grid.column="1" text="{binding body}" margin="4" textwrapping="wrap"/> </grid> </border> </datatemplate> </setter.value> </setter> </style>
c# counterpart logger defined:
public class loggermessage { public string head { get; set; } public string body { get; set; } } public class logger : listbox { private observablecollection<loggermessage> _log; public logger() : base() { defaultstylekey = typeof(logger); _log = new observablecollection<loggermessage>(); (int = 0; < 30; i++) { _log.add(new loggermessage() { head = "msg: " + i, body = "some long text wraps around." }); } this.itemssource = _log; } public void log(loggermessage item) { _log.add(item); } }
after bit of researching , trial , error, came style template (see below) solves problem but, not able grasp why did not work in version 1. why have explicitly "redefine" scrollviewer in controltemplate
<style targettype="local:logger"> <!-- begin - redef of controltemplate --> <setter property="scrollviewer.verticalscrollbarvisibility" value="auto"/> <setter property="template"> <setter.value> <controltemplate targettype="local:logger"> <scrollviewer x:name="scrollviewer" borderbrush="{templatebinding borderbrush}" borderthickness="{templatebinding borderthickness}" background="{templatebinding background}" foreground="{templatebinding foreground}" padding="{templatebinding padding}"> <itemspresenter/> </scrollviewer> </controltemplate> </setter.value> </setter> <!-- end - redef of controltemplate --> <setter property="itemtemplate"> <setter.value> <datatemplate> <grid> <grid.columndefinitions> <columndefinition width="auto"/> <columndefinition width="*"/> </grid.columndefinitions> <textblock grid.column="0" text="{binding head}" margin="4"/> <textblock grid.column="1" text="{binding body}" margin="4" textwrapping="wrap"/> </grid> </datatemplate> </setter.value> </setter> </style>
thanks in advance anykind of explanation.
kind regards
after bit of digging in msdn documentation (defaultstylekey), appears applying style control complete overwrite. seems style of base class not inherited assuming. document not tell explicitly but, above experiment sort lead understanding.
Comments
Post a Comment