在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代码(节点链接)被缓存 – 如何在拖动节点时强制重绘它?理想情况下,我想用除了当前拖动节点行之外的所有行构建缓存,并且只在将行拖动到该节点时重绘 – 不知道如何去做.
最佳答案 感谢您更新问题 – 从最初的描述我们在完全不同的页面上.
就个人而言,我不会实现这样的控制,因为我从之前的经验中知道这不是一件容易的事.在过去两次我需要图表的地方,我使用过中间件解决方案.
中间件的论点是一个简单的例子:
>它将为您节省大量的开发时间.
>您将更快地获得结果,让您专注于您的特定要求.
>即使您选择商业提供商,节省的时间也相当于金钱.
我最近评估了不到5个月前项目的图表中间件选项,所以我可以直接告诉你,对于WPF应用程序,最好的库是:
> Mindscape Diagrams 2(商业)
> Chart#(Codeplex Project,Microsoft Public License)
我已将这两种产品用于工作室应用程序(内部,但是就像用户是客户端一样发布).
…
看看上面的解决方案,回过头来回答更多问题(如果有的话)然后如果你还想写自己的话,我会至少指出你的方向和资源.
旁注,你说你喜欢ListBox的选择部分 – 你知道选择功能实际上是由Selector基类提供的吗?