Как добавить дочерние элементы ItemsControl, где дети должны сами определять свою позицию в Wpf? - PullRequest
1 голос
/ 09 марта 2010

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

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

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

1 Ответ

2 голосов
/ 09 марта 2010

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

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

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

Редактировать: пропустил изменение размера ...

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

...