在ListBox派生的CustomControl中,我需要绘制连接在Canvas ItemsPanel中布置的ListBoxItems的线。
我可以通过使用类ListBoxLines来实现这一点:UIElement在OnRender中绘图然后在我的ListBox ControlTemplate中包含该对象(但为此我需要将列表框内容传递给该类...)
<ControlTemplate TargetType="{x:Type p:NetworkVisualization}">
<Grid>
<p:ListBoxLines/>
<ItemsPresenter/>
</Grid>
</ControlTemplate>
我只是想知道是否有更轻松的方式。我真的只想将我的绘图代码直接添加到我的ListBox派生类中,但如果我这样做,它似乎在列表框画布白色背景下绘制。
有没有办法直接在我的派生列表框类中自定义列表框绘图?
编辑:此问题的动机是显示无线网状网络的节点和链接强度的自定义控件,如下图所示:
编辑:附加问题:ListBoxLines的OnRender代码(节点链接)被缓存 - 如何在拖动节点时强制重绘它?理想情况下,我想用除了当前拖动节点行之外的所有行构建缓存,并且只在将行拖动到该节点时重绘 - 不确定如何去做。
答案 0 :(得分:2)
感谢您更新问题 - 从我们在完全不同页面的原始描述中。
我个人不实现这样的控件,因为我从先前的经验中知道这不是一件容易的事。在最近的两个三次我需要图表的地方,我使用过中间件解决方案。
中间件的争论很简单:
我最近评估了不到5个月前项目的图表中间件选项,所以我可以直接告诉你,对于WPF应用程序,最好的库是:
我已将这两种产品用于工作室应用程序(内部,但是就像用户是客户端一样发布)。
...
看看上面的解决方案,回过头来回答更多问题(如果有的话)和然后如果你还想写自己的话,我会至少指出你的方向和资源要做。
附注,你说你喜欢ListBox
的选择部分 - 你知道选择功能实际上是由Selector
基类提供的吗?