在ListBox上绘制WPF

时间:2011-09-17 06:52:32

标签: wpf canvas listbox custom-controls

在ListBox派生的CustomControl中,我需要绘制连接在Canvas ItemsPanel中布置的ListBoxItems的线。
我可以通过使用类ListBoxLines来实现这一点:UIElement在OnRender中绘图然后在我的ListBox ControlTemplate中包含该对象(但为此我需要将列表框内容传递给该类...)

<ControlTemplate TargetType="{x:Type p:NetworkVisualization}">  
    <Grid>  
        <p:ListBoxLines/>
        <ItemsPresenter/>
    </Grid>
</ControlTemplate>

我只是想知道是否有更轻松的方式。我真的只想将我的绘图代码直接添加到我的ListBox派生类中,但如果我这样做,它似乎在列表框画布白色背景下绘制。
有没有办法直接在我的派生列表框类中自定义列表框绘图?
编辑:此问题的动机是显示无线网状网络的节点和链接强度的自定义控件,如下图所示:enter image description here 编辑:附加问题:ListBoxLines的OnRender代码(节点链接)被缓存 - 如何在拖动节点时强制重绘它?理想情况下,我想用除了当前拖动节点行之外的所有行构建缓存,并且只在将行拖动到该节点时重绘 - 不确定如何去做。

1 个答案:

答案 0 :(得分:2)

感谢您更新问题 - 从我们在完全不同页面的原始描述中。


我个人实现这样的控件,因为我从先前的经验中知道这不是一件容易的事。在最近的两个三次我需要图表的地方,我使用过中间件解决方案。

中间件的争论很简单:

  1. 它将为您节省大量的开发时间。
  2. 您可以更快地获得结果,让您专注于您的特定要求。
  3. 即使您选择商业提供商,节省的时间也相当于金钱。
  4. 我最近评估了不到5个月前项目的图表中间件选项,所以我可以直接告诉你,对于WPF应用程序,最好的库是:

    我已将这两种产品用于工作室应用程序(内部,但是就像用户是客户端一样发布)。

    ...

    看看上面的解决方案,回过头来回答更多问题(如果有的话)和然后如果你还想写自己的话,我会至少指出你的方向和资源要做。


    附注,你说你喜欢ListBox的选择部分 - 你知道选择功能实际上是由Selector基类提供的吗?