要么它非常简单,我还没有找到解决方案,否则我很快就会疯狂。
我只想在Line
上的ItemsControl
中绘制Canvas
,Line
两边应该有Ellipse
。像这样:
我的ItemsControl看起来像这样:
<ItemsControl ItemsSource="{Binding Connections}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type systemEnvironmentViewModels:SystemEnvironmentConnectionViewModel}">
<systemEnvironment:ConnectionView/>
</DataTemplate>
<Style TargetType="ContentPresenter"> <!-- this does only make it worse -->
<Setter Property="Canvas.Left" Value="{Binding Connection.FirstElementCoordinate.X}"/>
<Setter Property="Canvas.Top" Value="{Binding Connection.FirstElementCoordinate.Y}"/>
</Style>
</ItemsControl.Resources>
</ItemsControl>
用作DataTemplate的视图:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Ellipse x:Name="DependencyEllipse" Width="10" Height="10" Fill="Black" Grid.Column="0"/>
<Line X1="{Binding Connection.FirstElementCoordinate.X}" X2="{Binding Connection.SecondElementCoordinate.X}"
Y1="{Binding Connection.FirstElementCoordinate.Y}" Y2="{Binding Connection.SecondElementCoordinate.Y}"
Stroke="Black" StrokeThickness="5" x:Name="ConnectionLine" Grid.Column="1"/>
<Ellipse x:Name="SecondDependencyEllipse" Width="10" Height="10" Fill="Black" Grid.Column="2"/>
</Grid>
结果确实看起来不像我想要的,我知道使用带有列的Grid
可能不起作用,但它是我能想到的最接近允许按我想要的方式拆分元素。
同样Style
的{{1}}似乎也是错误的,因为如果没有它,我的线会像我想要的那样被绘制,但ContentPresenter
是错误的
我应该为Ellipse选择另一个ItemsControl吗? 非常感谢帮助。
答案 0 :(得分:1)
不要使用Ellipse,也不要在Grid列中放置元素。
而是使用具有EllipseGeometries的Path元素。以下示例假定FirstElementCoordinate和SecondElementCoordinate属性的类型为new SqlParameter("@p0", formatableString.GetArgument(0))
。如果不是这种情况,请使用适当的Binding Converter。
System.Windows.Point