xaml - WPF. ListBox item style -


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