В качестве моего первого проекта WPF я пытаюсь создать приложение для карточной игры, похожей на Magic the Gathering. Мне не понятно, как выложить основную игровую площадку. Вы можете увидеть некоторые примеры, которые похожи на то, что я пытаюсь сделать, взглянув на пример 1 или пример 2 . Области чата / информации справа будут отдельными пользовательскими элементами управления.
Карты должны поддерживать свои пропорции, и каждая игровая зона должна начинаться с 10 столбцов и двух рядов карт. По мере того, как будет сыграно больше карт, количество столбцов и / или строк может измениться. Каждая зона игрока может иметь различное количество столбцов и / или рядов. Карты могут накладываться друг на друга и могут располагаться сбоку (постукивать). Карты во всех областях должны быть одинакового размера (хотя они могут быть обрезаны в некоторых областях). Карты не должны лежать точно на сетке (они не обязательно привязываются к сетке).
Когда пользователь наводит указатель мыши на карту, он должен увеличиться до значительно большего размера с помощью анимации. Карта в одной области игрока может перетекать в область другого игрока при расширении (но только до тех пор, пока мышь зависает).
Учитывая эти требования, я испытываю желание использовать один большой пользовательский элемент управления, полученный из Canvas, с объектами изображений для каждой карты (наряду с другими формами для разграничения областей). Это подразумевает, что я буду выполнять большую работу во время события OnRenderSizeChanged, чтобы расположить дочерние элементы на холсте (макет вручную).
Использование сетки мне не представляется возможным из-за размещения произвольной формы и перекрытия.
Декомпозиция игровой зоны на более мелкие пользовательские элементы управления позволила бы использовать возможности макета WPF, но кажется, что декомпозиция препятствует расширению карт в соседние пользовательские элементы управления при наведении курсора, поэтому это также не представляется возможным.
Есть ли лучшая альтернатива одному большому элементу управления на основе холста? Кажется неправильным делать ручную разметку в WPF, но я не вижу альтернативы.