You may do it with help of Style and Converter like this:
Opacity converter:
using System;
using System.Globalization;
using System.Windows.Data;
namespace EnableButton
{
public class OpacityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool) value ? 1 : 0.5;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Your Xaml:
<Window x:Class="EnableButton.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EnableButton"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:OpacityConverter x:Key="OpacityConverter"/>
<Style x:Key="DisableIcon" TargetType="Image">
<Setter Property="Opacity" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsEnabled, Converter={StaticResource OpacityConverter}}"/>
</Style>
</Window.Resources>
<StackPanel>
<Button Height="24" IsEnabled="False">
<Image Style="{StaticResource DisableIcon}" Source="Open_22.png"/>
</Button>
</StackPanel>
</Window>
Now if you change IsEnable property of the button you will see the result. I change Opacity property of the Image from 100% to 50% when the parent button becomes disabled in OpacityConverter so you may fix this if you want another digits.
Update
I thought a little about your question. I think if the button becomes disabled it would be nice not only to change the Opacity of the image but also to convert an images picture into monochromic. So I found this solution (add reference to Microsoft.Expression.Effects.dll and add xmlns:ee="http://schemas.microsoft.com/expression/2010/effects" into the form before trying):
<Window x:Class="EnableButton.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EnableButton"
xmlns:ee="http://schemas.microsoft.com/expression/2010/effects"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style x:Key="DisableImageStyle" TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsEnabled}" Value="False">
<Setter Property="Opacity" Value="0.4"/>
<Setter Property="Effect">
<Setter.Value>
<ee:EmbossedEffect/>
<!--This effect is also looks nice-->
<!--<ee:MonochromeEffect/>-->
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<Button Height="40" IsEnabled="False">
<Image Style="{StaticResource DisableImageStyle}" Source="Open_22.png"/>
</Button>
</StackPanel>
</Window>
Notice that I don't use any converters now!