i have problem listbox item style, create 2 styles , not know use together. 1st style listbox item size, mouse on color , on, or second item background (alternation count). if leave 1 of them work fine, how make them work together? or maybe write in 1 style?
my code is:
..... <style x:key="style2" targettype="{x:type listboxitem}"> <setter property="snapstodevicepixels" value="true"/> <setter property="overridesdefaultstyle" value="true"/> <setter property="template"> <setter.value> <controltemplate targettype="listboxitem"> <border name="border" padding="7" snapstodevicepixels="true"> <contentpresenter /> </border> <controltemplate.triggers> <trigger property="isselected" value="true"> <setter targetname="border" property="background" value="{staticresource selectedbackgroundbrush}"/> </trigger> <trigger property="isenabled" value="false"> <setter property="foreground" value="{staticresource disabledforegroundbrush}"/> </trigger> </controltemplate.triggers> </controltemplate> </setter.value> </setter> <style.triggers> <trigger property="itemscontrol.alternationindex" value="0"> <setter property="background" value="#ffffff"></setter> </trigger> <trigger property="itemscontrol.alternationindex" value="1"> <setter property="background" value="#f7f7f7"></setter> </trigger> </style.triggers> </style> <style x:key="{x:type listboxitem}" targettype="{x:type listboxitem}" basedon="{staticresource style2}"> <style.triggers> <trigger property="itemscontrol.alternationindex" value="0"> <setter property="background" value="#19f39611"></setter> </trigger> <trigger property="itemscontrol.alternationindex" value="1"> <setter property="background" value="#19000000"></setter> </trigger> </style.triggers> </style> </window.resources> <grid > <scrollviewer margin="30,98,362,30"> <listbox x:name="lbpersonlist" alternationcount="2"> <listbox.itemtemplate> <datatemplate> <textblock text="{binding name}"/> </datatemplate> </listbox.itemtemplate> </listbox> </scrollviewer> </grid>
you can use basedon
<style x:key="style1" targettype="listboxitem"> ... </style> <style x:key="{x:type listboxitem}" targettype="listboxitem" basedon={staticresource style1}> ... </style> edited
the problem background setter of controltemplate. solution (using alternationconverter instead of triggers):
<window.resources> <alternationconverter x:key="backgroundconverter"> <solidcolorbrush color="#19f39611" /> <solidcolorbrush color="#19000000" /> </alternationconverter> <style x:key="style2" targettype="{x:type listboxitem}"> <setter property="snapstodevicepixels" value="true"/> <setter property="overridesdefaultstyle" value="true"/> <setter property="template"> <setter.value> <controltemplate targettype="listboxitem"> <border name="border" padding="7" snapstodevicepixels="true" background="{templatebinding background}"> <contentpresenter /> </border> <controltemplate.triggers> <trigger property="isselected" value="true"> <setter targetname="border" property="background" value="gray"/> </trigger> <trigger property="isenabled" value="false"> <setter property="foreground" value="green"/> </trigger> </controltemplate.triggers> </controltemplate> </setter.value> </setter> </style> <style x:key="style1" targettype="{x:type listboxitem}" basedon="{staticresource style2}"> <setter property="background" value="{binding relativesource={relativesource self}, path=(itemscontrol.alternationindex), converter={staticresource backgroundconverter}}"/> </style> </window.resources> <listbox x:name="lbpersonlist" alternationcount="2" itemcontainerstyle="{staticresource style1}"> ...
Comments
Post a Comment