我在这段代码中遇到了一些性能问题,如果我留在数据模板中的画布上,那么鼠标悬停在画布区域上是滞后的,但是如果我把它拿出来没有延迟(但显然Canvas.Left绑定没有不行,所以省略号位于错误的地方!)有没有办法摆放这些物品而不需要每个人都需要自己的画布?
<Canvas>
<ItemsControl ItemsSource="{Binding Path=SpatialData.TrainEvents.ArrDepEllipseOfLines}" Name="ctrlChartTrainEventsArrDep" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas>
<Ellipse Width="{Binding EventShape.Width}" Height="{Binding EventShape.Height}" Stroke="{Binding Path=Stroke}" StrokeThickness="{Binding StrokeThickness}" Fill="{Binding Path=Fill}" Canvas.Left="{Binding CanvasPlacement.X}" Canvas.Top="{Binding CanvasPlacement.Y}" />
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
非常感谢, 贝基
答案 0 :(得分:1)
是的,您可以删除椭圆中的画布。我想您会发现CanvasPlacement.X的值不会因椭圆而正确递增,而您看到的效果是您的ItemsControl中的每个元素实际上都放在了StackPanel中(默认行为可以通过ItemsPanel属性)然后为你铺设这些 - 最有可能是在水平线。