Ваша проблема связана с тем, что вся ваша геометрия обернута в объект «Изображение». По умолчанию свойства объекта .Height и .Width объекта Image установлены на «Авто», а свойство .Stretch установлено на «Унифицированный». Это гарантирует, что ваш прямоугольник всегда будет отображаться в верхнем левом углу холста.
Если вам действительно нужно инкапсулировать вашу геометрию в объекте «Изображение» (что я бы не рекомендовал вам делать), вам нужно будет установить «Поля вашего объекта изображения» на 300,480,0,0. чтобы ваш прямоугольник появился там, где вы хотите. Это необходимо из-за способа, которым объект Image обрабатывает свое содержимое.
Объект Image не ведет себя как объект Canvas, даже если он находится внутри него.
Если не существует какой-либо непреодолимой причины сохранить объект "Изображение", вы добьетесь гораздо большего успеха, если отбросите изображение и начнете рисовать непосредственно на холсте.
EDIT
Почему в этом случае не следует использовать объект Image?
Объект Image в основном используется для отображения ... ну, изображений, таких как растровые изображения и тому подобное. Он не подходит для рисования геометрии в определенном месте (и размере). Как и большинство элементов управления WPF, это то, что я бы назвал «относительным» элементом управления, что означает, что он хорошо подходит для автоматического изменения размера и позиционирования относительно его содержимого и его родителя. Canvas, с другой стороны, является примером «абсолютного» контроля. Вся причина его существования заключается в том, что он позволяет отображать контент в точном месте с точным размером. Добавление изображения внутри холста и последующее рисование геометрии внутри изображения просто добавляет ненужный слой сложности между холстом и геометрией, которую необходимо нарисовать.
Как можно добавить геометрию напрямую?
Один из самых простых способов - использовать объект Path, указанный в ответе Клеменса. Просто замените весь объект Image и все его содержимое на 5 строк этого пути, и ваш прямоугольник появится точно там, где и должен быть. Вы также можете сделать это с помощью одной строки и объекта Rectangle:
<Rectangle Height="83" Width="287" Margin="300,480,0,0" Stroke="#FF1acc33" StrokeThickness="1" Fill="Red" />
но я бы порекомендовал Path, так как он содержит размеры прямоугольника и в одном наборе чисел. Путь также дает вам гораздо большую гибкость, если вы работаете с фигурами, отличными от прямоугольников.