WPF 在 ListBox 上绘图

标签 wpf canvas listbox custom-controls

在 ListBox 派生的 CustomControl 中,我需要绘制连接在 Canvas ItemsPanel 中布置的 ListBoxItems 的线条。
我可以通过拥有类 ListBoxLines 来实现这一点:在 OnRender 中进行绘图的 UIElement,然后将该对象包含在我的 ListBox ControlTemplate 中(但要做到这一点,我需要将列表框内容通过管道传输到该类......)

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

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

最佳答案

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

我个人会不是 实现这样的控件,因为我从以前的经验中知道这不是一件容易的事。在最近两次需要制图的情况下,我使用了中间件解决方案。

中间件的论点是一个简单的例子:

  • 它将为您节省大量的开发时间。
  • 您将更快地获得结果,让您专注于您的特定要求。
  • 即使您选择商业提供商,节省的时间也等于金钱。

  • 我最近在不到 5 个月前评估了一个项目的图表中间件选项,因此我可以直接告诉您,对于 WPF 应用程序,最好的库是:
  • Mindscape Diagrams 2 (商业)
  • Chart# (Codeplex 项目,Microsoft 公共(public)许可证)

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

    ...

    看看上面的解决方案,带着更多的问题回来(如果有的话),然后如果你仍然想写你自己的,我至少会为你指明方向和资源。

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

    关于WPF 在 ListBox 上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7453035/

    相关文章:

    c# - 使用 C# 将 WPF 文件转换为 PNG 文件

    javascript - 具有 "feather"边缘效果的 Canvas 裁剪

    javascript - 在给定时间后停止 HTML5 Javascript 动画

    C# - 如何找到列表框项目的数据库键?

    c# - 在 Listbox.ItemTemplate (WPF C#) 中查找控件

    c# - 列表框中的 Foreach 语句

    c# - 如何在 XAML 中使用条件打印文本 block ?

    wpf - 我可以在不知道绑定(bind)本身的情况下更改 DataTrigger 中绑定(bind)的属性吗?

    wpf - 如何在 UserControl 和父窗口之间绑定(bind) WPF 命令

    javascript - 如何在 HTML5 Canvas 中随文本一起绘制和旋转图像