c# wpf canvas itemscontrol

c# - Establecer las propiedades de Canvas en ItemsControl DataTemplate



wpf (1)

Estoy tratando de ItemsControl datos con este ItemsControl :

<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <Canvas /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl>

Al usar este DataTemplate , trato de posicionar individualmente mis elementos Node en el Canvas correctamente:

<DataTemplate DataType="{x:Type Model:EndNode}"> <Controls:EndNodeControl Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" /> </DataTemplate>

Sin embargo, no está funcionando como se esperaba. Todos mis elementos de nodo se dibujan uno encima del otro en la misma posición. ¿Alguna sugerencia sobre cómo lograr esto?


Las propiedades adjuntas solo funcionan en hijos directos del Canvas. ItemsControl colocará los controles de ContentPresenter como sus hijos directos, por lo que es posible que desee agregar un estilo para eso también:

<ItemsControl ItemsSource="{Binding Path=Nodes}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <Canvas /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemContainerStyle> <Style TargetType="ContentPresenter"> <Setter Property="Canvas.Left" Value="{Binding Path=XPos}" /> <Setter Property="Canvas.Top" Value="{Binding Path=YPos}" /> </Style> </ItemsControl.ItemContainerStyle> </ItemsControl>

Espero que esto ayude