c# - Image shifting while displaying border around listbox item wpf -
i using listbox display images. when listbox item selected displays border around image. instead of displaying border around image shifts image towards right.
listbox style:
<style targettype="{x:type listbox}"> <setter property="itemtemplate"> <setter.value> <datatemplate> <stackpanel orientation="horizontal"> <image source="{binding path=urisource}" stretch="fill" width="639" height="530"> </image> </stackpanel> </datatemplate> </setter.value> </setter> <setter property="itemspanel"> <setter.value> <itemspaneltemplate> <wrappanel /> </itemspaneltemplate> </setter.value> </setter> <setter property="scrollviewer.horizontalscrollbarvisibility" value="disabled"/> <setter property="scrollviewer.verticalscrollbarvisibility" value="disabled"/> <setter property="horizontalcontentalignment" value="left"/> <setter property="verticalcontentalignment" value="center" /> </style> list box item style:
<style targettype="{x:type listboxitem}" x:key="containerstyle"> <setter property="padding" value="0,0,0,0"/> <setter property="template"> <setter.value> <controltemplate targettype="{x:type listboxitem}"> <border x:name="bd" snapstodevicepixels="true" background="{templatebinding background}" borderbrush="{templatebinding borderbrush}" borderthickness="0" padding="{templatebinding padding}"> <contentpresenter horizontalalignment="{templatebinding horizontalcontentalignment}" verticalalignment="{templatebinding verticalcontentalignment}" snapstodevicepixels="{templatebinding snapstodevicepixels}"/> </border> <controltemplate.triggers> <trigger property="isselected" value="true"> <setter property="borderbrush" targetname="bd" value="{staticresource bordercolor}"/> <setter property="borderthickness" targetname="bd" value="12" /> <setter property="width" value="639" /> <setter property="height" value="530" /> </trigger> <multitrigger> <multitrigger.conditions> <condition property="isselected" value="true"/> <condition property="selector.isselectionactive" value="false"/> </multitrigger.conditions> <setter property="borderbrush" targetname="bd" value="{staticresource bordercolor}"/> <setter property="borderthickness" targetname="bd" value="12" /> <setter property="width" value="639" /> <setter property="height" value="530" /> </multitrigger> </controltemplate.triggers> </controltemplate> </setter.value> </setter> </style>
this because in listboxitem style, you're changing border's thickness, 0 in normal case, 12 when item selected. shifts content 12pt.
you have several of possible solutions here, here 2 possibilities:
- always use 12pt border, use
transparentor{x:null}brush in unselected state - use
12margin oncontentpresenter, , set0in triggers
Comments
Post a Comment