Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'Graying Out' a WPF button image?

I have a simple Button control that contains an Image object as its content. I want so set the Image opacity to 0.5 when the Button is disabled to provide an additional visual cue as to the Button status.

What is the simplest way to accomplish that result in XAML? Thanks for your help.

like image 627
David Veeneman Avatar asked Mar 27 '10 20:03

David Veeneman


1 Answers

Use a trigger in the Image style. (It would be more natural to put it in the Button style, but the Button style can't easily affect the Image for annoying technical reasons. It could be done in the Button's ControlTemplate but that's overkill for what you want here.)

<Button>   <Image Source="something.png">     <Image.Style>       <Style TargetType="Image">         <Style.Triggers>           <Trigger Property="IsEnabled" Value="False">             <Setter Property="Opacity" Value="0.5" />           </Trigger>         </Style.Triggers>       </Style>     </Image.Style>   </Image> </Button> 

Note we are taking advantage here of the fact that the Image will be disabled when the Button is disabled, so we can trigger directly on the Image's own IsEnabled property. In other cases, the Button property we want to trigger on might not be inherited by the Image; in that case, we'd need to use a DataTrigger with the FindAncestor RelativeSource to bind to the containing button.

like image 51
itowlson Avatar answered Oct 21 '22 23:10

itowlson