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