Установка свойств Canvas в ItemsControl DataTemplate
Я пытаюсь привязать данные к этому ItemsControl
:
<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Используя этот DataTemplate
, я пытаюсь индивидуально расположить мои Node
элементы на Canvas
Правильно:
<DataTemplate DataType="{x:Type Model:EndNode}">
<Controls:EndNodeControl Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" />
</DataTemplate>
Однако это работает не так, как ожидалось. Все мои элементы узла нарисованы поверх друг друга в одном и том же положении. Есть предложения, как это сделать?1 ответ:
Присоединенные свойства работают только на прямых потомках холста. ItemsControl разместит элементы управления ContentPresenter в качестве своих прямых потомков, поэтому вы можете добавить стиль и для этого:
<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>
Надеюсь, это поможет