WPF Button behavior using Triggers -


i have button custom appearance defined controltemplate.

it contains canvas contains path. add changes in path.opacity depending on mouse state:

  • default - 0.5
  • mouse over, not pressed - 1.0
  • mouse over, pressed - 0.5

the first cases covered setting local value of path.opacity 0.5 , adding 1 trigger ismouseover:

<button x:class="imagingshop.panosphere.controls.pathbutton"              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"               xmlns:d="http://schemas.microsoft.com/expression/blend/2008"               mc:ignorable="d"               d:designheight="100" d:designwidth="100"         name="pathbutton">      <button.template>         <controltemplate>             <canvas background="transparent" width="{templatebinding width}" height="{templatebinding width}">                 <canvas.style>                     <style targettype="canvas">                         <setter property="path.opacity" value="0.5"/>                         <style.triggers>                             <trigger property="ismouseover" value="true">                                 <setter property="path.opacity" value="1.0"/>                             </trigger>                         </style.triggers>                     </style>                 </canvas.style>                 <path data="{binding elementname=pathbutton, path=pathdata}" stretch="uniform" fill="#ffffffff" width="{templatebinding width}" height="{templatebinding width}"/>             </canvas>         </controltemplate>     </button.template>      <grid>      </grid> </button> 

however, third case not work. have added following trigger:

<multitrigger>     <multitrigger.conditions>         <condition property="ismouseover" value="true"/>         <condition property="button.ispressed" value="true"/>     </multitrigger.conditions>     <setter property="path.opacity" value="0.75"/> </multitrigger> 

so should set path.opacity 0.75 mouse hovers on button and button pressed.

i stuck opacity changed 0.5 instead of 0.75! trigger seems apply, not work expected...

why not using opacity of button , have triggers on button's style directly, controltemplate not have path anyways.

<style targettype="{x:type local:pathbutton}">   <setter property="opacity"           value=".5" />   <setter property="overridesdefaultstyle"           value="true" />   <setter property="template">     <setter.value>       <controltemplate targettype="{x:type local:pathbutton}">         <canvas width="{templatebinding width}"                 height="{templatebinding width}"                 background="transparent">           <path width="{templatebinding width}"                 height="{templatebinding width}"                 data="{binding elementname=pathbutton,                                 path=pathdata}"                 fill="#ffffffff"                 opacity="{templatebinding opacity}"                 stretch="uniform" />         </canvas>       </controltemplate>     </setter.value>   </setter>   <style.triggers>     <trigger property="ismouseover"               value="true">       <setter property="opacity"               value="1" />     </trigger>     <trigger property="ispressed"               value="true">       <setter property="opacity"               value=".75" />     </trigger>   </style.triggers> </style> 

will produce output expecting.

update:

you can have style in resourcedictionary , have subclass declaration in code-behind file. produce 1 xaml file. not left 2 xaml files in method.

have switched binding pathdata relativesource binding.

you can download sample of here. open , check out

i've used add-in nestin lets group files custom groups editing vsproj file , adding dependson attribute. lets group resourcedictionary , code-behind class file 1 entity pathbutton.xaml how usercontrol , window in ide code-behind file.


Comments

Popular posts from this blog

Perl - how to grep a block of text from a file -

delphi - How to remove all the grips on a coolbar if I have several coolbands? -

javascript - Animating array of divs; only the final element is modified -