Я следующие XAML-код:WPF/C#: Подключение формы динамически с линиями
<Grid>
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas></Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Ellipse Width="{Binding Radius}" Height="{Binding Radius}" Fill="{Binding BackColor}" />
<Line Stroke="Black" StrokeThickness="1" x:Name="_Line"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding X}"/>
<Setter Property="Canvas.Top" Value="{Binding Y}"/>
<Setter Property="Line.X1" Value="{Binding LineX1}"/>
<Setter Property="Line.X2" Value="{Binding LineX2}"/>
<Setter Property="Line.Y1" Value="{Binding LineY1}"/>
<Setter Property="Line.Y2" Value="{Binding LineY2}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Grid>
Это ItemsControl, чей ItemPanel является Canvas динамически разместить эллипсы из Obervable коллекции я привязана к какому. Размещение эллипсов с значениями Canvas.Top и Canvas.Left отлично работает. Но он не рисует линии для соединения эллипсов.
Позиции для линий рассчитываются правильно в коде позади, я проверил это.
Ok спасибо, но теперь линии нарисованы на неправильных позициях, и эллипсы также находятся в неправильном положении. Я бы добавил изображение, но я не могу :) Редактировать: эллипсы имеют большее расстояние между ними, чем раньше, и линии имеют прямые углы, но находятся на неправильных позициях. Координаты LineX1-X2-Y1-Y2 являются правильными. –
Как сказано, свойства LineX и LineY теперь относятся к элементу, то есть Line.X1 и Line.Y1 всегда равны нулю, тогда как Line.X2 и Line.Y2 получают относительные координаты конечной точки линии, то есть различия (LineX2 - LineX1) и (LineY2 - LineY1), соответственно. Также для рисования центрированного эллипса вам нужно будет заменить элемент управления Ellipse элементом управления Path, который содержит EllipseGeometry. – Clemens
Альтернативой было бы поставить элементы управления Line в ItemTemplate второго элемента ItemsControl, который не устанавливает Canvas.Left и Canvas.Top в свой ItemContainerStyle. – Clemens