Максимальное заполнение внешнего контейнера компоновки с помощью UniformGrid
Задача заполнить контейнер (Grid, например) максимально эффективно по площади элементами типа Image. Максимальная эффективность - значит соотношение площади контейнера к суммарной площади элементов будет максимальным (в идеале 1, но в рамках этой задачи так не обязательно получится). Количество изображений неизвестно заранее. Изображения не должны менять свое соотношение сторон. При этом они должны растягиваться и размещаться по строкам и колонкам так, чтобы максимально заполнять внешний контейнер. Внешний контейнер динамически растягивается в соответствии с размерами окна.
Я пытался использовать стандартные свойства UniformGrid (и WrapPanel), но у меня не получилось ничего хорошего.
Например, UniformGrid если свойства Rows и Columns не задавать явно, рассчитывает количество колонок и строк сам. Так для 1 элемента будет 1 строка, для 2-4 - две строки, для 5-9 элементов - три строки и т.д. Размер внешнего контейнера при этом не учитывается.
То что нужно:
То что получается:

Еще раз, желаемый результат (сделан с помощью дополнительного класса, а не разметки)

Вопрос: а в WPF вообще есть стандартные средства разметки xaml, чтобы организовать заполнение контейнера компоновки так, как описано в задаче? Или это задача двумерной упаковки, для которой нужно писать костыли в виде каких-нибудь конвертеров данных?