My name is Edward Tanguay. I'm an American software and web developer living and working in Berlin, Germany.
WPF CODE EXAMPLE created on Tuesday, March 16, 2010 permalink
How to get the mouse-click and mouseover coordinates from an image
This example shows how easy it is to respond to what the mouse is doing on top of an image: in the event handlers you get the coordinates of the mouse when clicked or moved. Note that this works in Silverlight as well, you just have to use ContentControl_MouseLeftButtonDown.
XAML:
<Window x:Class="TestClick828374.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel Margin="10">
        <ContentControl Content="{Binding TheImage}"
            MouseDown="ContentControl_MouseDown"
            MouseMove="ContentControl_MouseMove"
            Margin="0 0 0 10"/>

        <StackPanel Orientation="Horizontal">
            <TextBlock Text="mouse-click X = "/>
            <TextBlock Text="{Binding HorizontalClickPoint}"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal" Margin="0 0 0 5">
            <TextBlock Text="mouse-click Y = "/>
            <TextBlock Text="{Binding VerticalClickPoint}"/>
        </StackPanel>

        <StackPanel Orientation="Horizontal">
            <TextBlock Text="mouseover X = "/>
            <TextBlock Text="{Binding HorizontalMouseOverPoint}"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal" Margin="0 0 0 5">
            <TextBlock Text="mouseover Y = "/>
            <TextBlock Text="{Binding VerticalMouseOverPoint}"/>
        </StackPanel>
    </StackPanel>
</Window>

Code-Behind:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.ComponentModel;

namespace TestClick828374
{
    public partial class Window1 : Window, INotifyPropertyChanged
    {
        #region ViewModelProperty: TheImage
        private Image _theImage;
        public Image TheImage
        {
            get
            {
                return _theImage;
            }

            set
            {
                _theImage = value;
                OnPropertyChanged("TheImage");
            }
        }
        #endregion test

        #region ViewModelProperty: HorizontalClickPoint
        private double _horizontalClickPoint;
        public double HorizontalClickPoint
        {
            get
            {
                return _horizontalClickPoint;
            }

            set
            {
                _horizontalClickPoint = value;
                OnPropertyChanged("HorizontalClickPoint");
            }
        }
        #endregion test

        #region ViewModelProperty: VerticalClickPoint
        private double _verticalClickPoint;
        public double VerticalClickPoint
        {
            get
            {
                return _verticalClickPoint;
            }

            set
            {
                _verticalClickPoint = value;
                OnPropertyChanged("VerticalClickPoint");
            }
        }
        #endregion test

        #region ViewModelProperty: HorizontalMouseOverPoint
        private double _horizontalMouseOverPoint;
        public double HorizontalMouseOverPoint
        {
            get
            {
                return _horizontalMouseOverPoint;
            }

            set
            {
                _horizontalMouseOverPoint = value;
                OnPropertyChanged("HorizontalMouseOverPoint");
            }
        }
        #endregion test

        #region ViewModelProperty: VerticalMouseOverPoint
        private double _verticalMouseOverPoint;
        public double VerticalMouseOverPoint
        {
            get
            {
                return _verticalMouseOverPoint;
            }

            set
            {
                _verticalMouseOverPoint = value;
                OnPropertyChanged("VerticalMouseOverPoint");
            }
        }
        #endregion test

        public Window1()
        {
            InitializeComponent();
            DataContext = this;

            TheImage = new Image();
            TheImage.Source = new BitmapImage(new Uri(@"c:testrectangle.png"));
            TheImage.Stretch = Stretch.None;
            TheImage.HorizontalAlignment = HorizontalAlignment.Left;

        }

        #region INotifiedProperty Block
        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;

            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion test

        private void ContentControl_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            Point clickPoint = e.GetPosition(TheImage);
            HorizontalClickPoint = clickPoint.X;
            VerticalClickPoint = clickPoint.Y;
        }

        private void ContentControl_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            Point clickPoint = e.GetPosition(TheImage);
            HorizontalMouseOverPoint = clickPoint.X;
            VerticalMouseOverPoint = clickPoint.Y;
        }
    }
}
need markup?