Отобразить картинку в заданном месте и заданного размера

Есть картинка 800х600. Её надо отобразить на позиции [X,Y], размером 200х200. При этом пропадут пропорции, но это не важно.
На WinForms это, вроде, Graphics.DrawImage(). А для WPF уже несколько раз гуглил, но ничего конкретного не нашел.

<Window x:Name="Form1" x:Class="xxx.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:xxx"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" Loaded="Form1_Loaded" SizeChanged="Form1_SizeChanged">
    <Canvas x:Name="img"></Canvas>
</Window>
        private void Form1_Loaded(object sender, RoutedEventArgs e)
        {
            string fn = "H:\\кот.jpg";
            BitmapImage image = new BitmapImage(new Uri(fn));

            ImageBrush imageBrush = new ImageBrush();
            imageBrush.ImageSource = image;
            imageBrush.Viewport = new Rect(0, 0, 0.5, 0.25);
            imageBrush.TileMode = TileMode.Tile;
            img.Background = imageBrush;
        }

выглядит вот так:

Но это с канвасом, который автоматически растягивается на всё окно. А мне надо ограничить область, в которой можно будет рисовать.
А допустим, если вместо канваса использовать Image, то как на нем отобразить картинку?
Ну или может есть сторонний компонент, который уже это умеет?

Там задаются позиции и размеры. The Canvas control - The complete WPF tutorial

Но вообще обычно лучше нормально использовать грид и т.д.

когда я задаю размер канваса, то картинка всё-равно заполняет всё окно.
Я понял. Если скопипастить Width и Height и поменять им значения, то не работает. А если набрать то же самое вручную, то работает. Зачем так сделано? :dizzy_face:

А кактинку-то как отобразить? :thinking: Метода DrawImage() нету :man_shrugging:
В примере по ссылке только круг и квадраты рисуют.

<Image Source="...

The Image control - The complete WPF tutorial

:arrow_heading_down:

чтобы отобразить несколько картинок на одном экране

Так канвас это и есть контейнер позволяющий задавать позицию как в дельфи/винформс без Anchor и т.п.
А размер есть у самого Image

<Canvas>
    <Image Canvas.Left="25" Canvas.Top="25" Height="200" Source="..." />
</Canvas>

Но вообще он редко нужен

Что за картинка, для чего она?

А разве без грида и канваса нельзя менять позицию и размер компонентов? :thinking: Вроде ведь можно.

Ну вот объясняю еще раз. На WinAPI есть функция GetDC(). Берём DC окна и рисуем на нём что хотим и как хотим LineTo(), DrawBitmap(), DrawIcon(), Ellipse(), FillRect() и т.д. На Delphi и WinForms есть обёртки. А на WPF как? :thinking: Гуглил, что есть всякие ImageBrushи, но там с параметрами не понятно.

Рисовать можно как-то так https://stackoverflow.com/a/52069752/964478, но конечная цель-то какая? Наверняка есть более простые и удобные способы её достижения.

Грид это контейнер, в котором создаются строки/столбцы определенных размеров (в % или пикселях или все оставшееся место) и в ячейки кладутся элементы. И при ресайзе оно будет подстраиваться.

Канвас это контейнер, где можно просто задавать координаты.

Без контейнеров нельзя добавить элементы (или может быть только один).

В данный момент - сделать tile из одной картинки. Или, например, растянуть её до какого-то размера (сохраняя или не сохраняя пропорции) и потом сделать tile.
Я видел, что есть TileBrush, но не понятно, как пользоваться. Единственное, что я понял, это то что тайлом будет занято всё пространство окна. А если мне всё не надо, например?

Да это я видел. По-моему, извращение какое-то.
Если надо рисовать линию пока нажата кнопка мыши, надо постоянно удалять и добавлять линию в список? А перерисовка сама, что ли, вызывается?

Да, это обычный элемент.

Надо гуглить примеры похожих приложений https://www.google.com/search?q=wpf+paint+app

Можно менять элементы, добавлять точки как тут Let the user draw a polyline in WPF and C# - C# HelperC# Helper

Смотря как настроить контейнер(ы) куда элемент добавлен.

То есть, перерисовка придёт как при добавлении, так и при удалении?

И при изменении его свойств.