Get position on a Canvas with Canvas.GetLeft
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="Thumb_wcp.Pane1"> <Canvas Width="100" Height="100" Name="myCanvasStretch"> <TextBox Name="changes" Width="{Binding ElementName=myCanvasStretch,Path=Width}" Height="{Binding ElementName=myCanvasStretch,Path=Height}" Text="Size: 100, 100"/> <Thumb Name="myThumb" Canvas.Left="80" Canvas.Top="80" Background="Blue" Width="20" Height="20" DragDelta="onDragDelta"/> </Canvas> </Canvas> //File:Window.xaml.cs using System; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Documents; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Data; using System.Windows.Media; namespace Thumb_wcp { public partial class Pane1 : Canvas { void onDragDelta(object sender, DragDeltaEventArgs e) { double yadjust = myCanvasStretch.Height + e.VerticalChange; double xadjust = myCanvasStretch.Width + e.HorizontalChange; if ((xadjust >= 0) && (yadjust >= 0)) { myCanvasStretch.Width = xadjust; myCanvasStretch.Height = yadjust; Canvas.SetLeft(myThumb, Canvas.GetLeft(myThumb) + e.HorizontalChange); Canvas.SetTop(myThumb, Canvas.GetTop(myThumb) + e.VerticalChange); Console.WriteLine(myCanvasStretch.Width); Console.WriteLine(myCanvasStretch.Height); } } } }