【问题标题】:Silverlight 4 Canvas.Left binding without canvas per itemSilverlight 4 Canvas.Left 绑定,每个项目没有画布
【发布时间】:2011-02-04 14:24:05
【问题描述】:

我在这段代码中遇到了一些性能问题,如果我将鼠标留在数据模板中的画布中,鼠标悬停在画布区域上会很滞后,但如果我将它们取出则不会滞后(但显然 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>

非常感谢, 贝基

【问题讨论】:

  • 在此处放置一些代码/xaml,以便其他人轻松重现您的问题。

标签: data-binding silverlight-4.0 itemscontrol


【解决方案1】:

是的,您可以删除椭圆中的画布。我认为您会发现 CanvasPlacement.X 的值不会按椭圆正确递增,您看到的效果是 ItemsControl 中的每个元素实际上都放置在 StackPanel 中(默认行为,可以通过ItemsPanel 属性)然后为您布置这些 - 很可能在水平线上。

【讨论】:

  • 啊,这很有趣——实际上它确实在父画布的左侧垂直排列了椭圆。但是,将画布放在 ItemsPanel 属性中并不意味着我可以删除 itemtemplate 画布,因为 .Left 绑定被忽略了,因此我遇到了同样的问题 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 2023-03-20
  • 1970-01-01
  • 2013-12-11
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多