Как добавить детей в 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
не позволяет такого рода позиционирования.