【问题标题】:(WPF) UserControl or CustomControl?(WPF) 用户控件还是自定义控件?
【发布时间】:2010-10-20 11:59:08
【问题描述】:

我需要构建一个特定的交互式绘图“画布”。

在该画布中,用户将能够放置图形元素 - 与线相连的点。

我有一个现成的 WinForms UserControl - pointsList,它代表画布中的点列表。 PointsList 可以添加和删除点,用线连接它们。

pointsList 应该是画布中的浮动(可移动)和可调整大小的控件(就像屏幕上的窗口一样)。

我的问题:

  1. 这个“画布”的最佳选择是 WPF UserControl 还是 CustomControl
  2. 是否可以将(浮动)WinForm UserControl 放置在 WPF 控件中?
  3. 在另一个内部重写浮动和可调整大小的 WPF 用户控件是否会很困难?

编辑

对“浮动控件”的更好解释:

想象一个 WPF 容器(比如 Canvas)。 在此画布中,您有一个按钮。 当您单击该按钮时,“浮动窗口控件”会在画布内部打开。

这个控件就像一个 Windows 窗体,可以打开、移动、关闭、调整大小,但所有这些都在父画布内。类似于 MDI 父窗体和子窗体的东西,但父窗体不是窗体,而是 WPF 容器(比如 Canvas)。

【问题讨论】:

    标签: .net wpf user-controls


    【解决方案1】:

    1) 这两种类型都可以满足您的需求。用户控件通常更容易创作,尤其是当您不熟悉 WPF 时。 CustomControl 实际上不是一个类,但它意味着你扩展了一个现有的控件。两种方法之间存在一些差异,最大的一个是自定义控件更容易使其主题化。在您的情况下,我认为这不是必需的,因此我建议使用 UserControl。更多信息:http://www.wpftutorial.net/CustomVsUserControl.html

    2) 是的。您可以使用 WindowsFormsHost 控件将 WinForms 控件放入 WPF 中。一个限制是 WinForms 控件必须是不透明的矩形,这意味着您不能放入不同的形状并期望它们正确叠加。查找 WindowsFormsHost,您会发现很多示例。

    3) 你能解释得更好吗?不明白你的意思,但当然你可以将 UserControls 放在一起,WPF 在处理动态大小时特别有用。

    【讨论】:

    • 谢谢。 1)将 UserControl 用于画布,2)我不需要透明度,但需要交互(例如拖动); 3) 请参阅我对第三点的编辑。
    • 2) 关于交互,这是可以的,但话说回来,如果你的要求是覆盖一些项目,这是不可能的,互操作性和布局将始终基于矩形区域。
    • 3) 关于 MDI 类型的 UI,这绝对可以做到。在 google 中查找示例,但请放心,WPF 将允许它,具体取决于您的场景。
    【解决方案2】:

    我们从 CodeProject 调整了这个 WPF 代码。 link text

    【讨论】:

    • 如果是,您的建议是什么?
    • 这里的DesignerCanvas是Canvas的派生。它运作良好。画布上的东西通常是用户控件(这些被插入到画布上的 DesignerItems(ContentControls) 中。
    猜你喜欢
    • 2011-09-10
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多