Как добавить детей в ItemsControl, где дети должны сами определять свою позицию в Wpf?

Я использую ползунок wpf для отображения временной шкалы в видеоплеере. Мне нужно добавить ItemControl некоторого вида поверх этого, чтобы я мог добавить кнопки на временной шкале в определенных позициях на временной шкале (кнопки будут занимать свою собственную позицию относительно родительского ItemsControl).

Какой контейнер ItemsControl следует использовать, где я могу добавить дочерние элементы, которые знают свою собственную позицию (на основе их временного кода)? Я посмотрел на разные ItemsControls в Wpf, и похоже, что у всех них есть определенный способ сложить свои дочерние элементы (горизонтальный или вертикальный один за другим)!

И чтобы добавить еще больше сложности, как расположение дочерних элементов может быть относительно ширины родительского ItemsControl? Таким образом, масштабирование ItemsContol будет перемещать детей!

1 ответ

Решение

Элемент управления WPF, который позволяет явное позиционирование, является Canvas, Вы можете установить Canvas.Left а также Canvas.Top на детском контроле по мере необходимости

Вы можете сделать ItemControl использовать Canvas для макета, как это:

<ItemsControl>
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <Canvas IsItemsHost="True" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
</ItemsControl>

Изменить: пропустил изменение размера...

Если вы используете ViewBox вокруг ItemsControl размер контента автоматически изменится, но сами элементы также увеличатся. Если это не подходит, я думаю, вам придется вручную переместить элементы управления, так как Canvas не позволяет такого рода позиционирования.

Другие вопросы по тегам