Como adicionar filhos de um itemsControl onde as crianças devem decidir sua própria posição no WPF?

StackOverflow https://stackoverflow.com/questions/2408056

Pergunta

Estou usando um controle deslizante WPF para exibir a linha do tempo em um player de vídeo. Preciso adicionar um item de algum tipo em cima disso para poder adicionar botões na linha do tempo em determinadas posições na linha do tempo (os botões manterão sua própria posição em relação ao pai -itemsControl).

Qual contêiner do itemScontrol devo usar onde posso adicionar elementos filhos que conhecem sua própria posição (com base no código de tempo deles)? Eu olhei para os diferentes ItemsControls no WPF, e parece que todos eles têm uma certa maneira de empilhar seus filhos (horizontal ou vertical após o outro)!

E para acrescentar mais complexidade, como o posicionamento das crianças pode ser em relação à largura do pai -item dos pais? Dessa forma, escalar o itemscontol reposicionará as crianças!

Foi útil?

Solução

O controle WPF que permite o posicionamento explícito é o Canvas. Você pode então definir Canvas.Left e Canvas.Top nos controles infantis, conforme necessário.

Você pode fazer um ItemControl use um Canvas Para layout como este:

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

Edit: perdi o redimensionamento ...

Se você usa um ViewBox em volta do ItemsControl O conteúdo redimensionará automaticamente, mas os próprios itens também ficarão maiores. Se isso não for adequado, acho que você terá que reposicionar manualmente os controles, já que o Canvas Não permite esse tipo de posicionamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top