Максимальное заполнение внешнего контейнера компоновки с помощью UniformGrid

Задача заполнить контейнер (Grid, например) максимально эффективно по площади элементами типа Image. Максимальная эффективность - значит соотношение площади контейнера к суммарной площади элементов будет максимальным (в идеале 1, но в рамках этой задачи так не обязательно получится). Количество изображений неизвестно заранее. Изображения не должны менять свое соотношение сторон. При этом они должны растягиваться и размещаться по строкам и колонкам так, чтобы максимально заполнять внешний контейнер. Внешний контейнер динамически растягивается в соответствии с размерами окна.

Я пытался использовать стандартные свойства UniformGrid (и WrapPanel), но у меня не получилось ничего хорошего.

Например, UniformGrid если свойства Rows и Columns не задавать явно, рассчитывает количество колонок и строк сам. Так для 1 элемента будет 1 строка, для 2-4 - две строки, для 5-9 элементов - три строки и т.д. Размер внешнего контейнера при этом не учитывается.

То что нужно: То что хотелось получить То что получается: То что получилось

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

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


Ответы (0 шт):