Puedes crear un ControlTemplate con el layout que necesitas y agregarle triggers para cambiar la visibilidad del boton segun el IsMouseOver del Image.
Aqui un ejemplo funcionando(he cambiado el Image por un Text):
MainWindow.xaml
<Window x:Class="Test_WPF_IsMouseOver.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:testWpfIsMouseOver="clr-namespace:Test_WPF_IsMouseOver"
Title="MainWindow"
Height="350"
Width="525">
<Window.Resources>
<ControlTemplate x:Key="DataItemControlTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Name="Img1" Text="{Binding Text}" />
<Button Name="Btn1" Visibility="Hidden" Content="Click me!"/>
</StackPanel>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=Img1, Path=IsMouseOver}" Value="True">
<Setter TargetName="Btn1" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=Img1, Path=IsMouseOver}" Value="False">
<Setter TargetName="Btn1" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Resources>
<Window.DataContext>
<testWpfIsMouseOver:MainWindowViewModel />
</Window.DataContext>
<Grid>
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl Template="{StaticResource DataItemControlTemplate}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
MainWindowViewModel.cs
public class MainWindowViewModel : ViewModelBase
{
private readonly int itemCount;
public ObservableCollection<Item> Items { get; private set; }
public MainWindowViewModel()
{
this.itemCount = 10;
this.Items = new ObservableCollection<Item>();
for (var i = 0; i < this.itemCount; i++)
{
this.Items.Add(new Item("Thi is item number " + i));
}
}
}
public class Item
{
public string Text { get; private set; }
public Item(string text)
{
this.Text = text;
}
}
Screenshot