Use un disparador en el estilo de Imagen. (Sería más natural ponerlo en el estilo de Botón, pero el estilo de Botón no puede afectar fácilmente a la Imagen por razones técnicas molestas. Se puede hacer en ControlTemplate del Botón, pero eso es demasiado para lo que quiere aquí).
<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>
Nota estamos tomando ventaja en este caso el hecho de que la imagen se desactiva cuando el botón está desactivado, por lo que puede desencadenar directamente en propiedad IsEnabled de la imagen. En otros casos, la propiedad Button que queremos activar puede no ser heredada por la imagen; en ese caso, necesitaríamos usar un DataTrigger con FindAncestor RelativeSource para enlazar al botón que lo contiene.
No se pudo hacer este trabajo. Esto funcionó para mí: http://stackoverflow.com/questions/4532943/icommand-canexecute-can-not-disable-button-with-image-content/11126571#11126571 – aeinstein