如何在设计时制作支持拖放的自定义WPF ContentControl?

时间:2011-03-04 12:08:31

标签: wpf user-controls

我想创建自定义WPF控件,里面有一个“子”控件。子类ContentControlUserControl有效,但有一个缺陷:这些控件在设计器模式下不起作用。

通过“不工作”我的意思是这种情况:假设我有一个Canvas我的自定义控件。我想把Button放在我的控制范围内。我将它从工具箱中拖出,在我的控件中显示。但是,XAML视图显示新按钮实际上属于Canvas,而不是我的控件。

我可以通过手动编辑XAML将其放在我的控制范围内,但我也希望设计师能够工作。

有趣的是,当我继承CanvasGridPanel时,设计师按预期工作。但是,这些控件有许多子项,这不是我需要的。

如何制作适用于设计师的单子控件?

3 个答案:

答案 0 :(得分:3)

如何继承Border?这样你可以省去设计师可扩展性的麻烦

答案 1 :(得分:1)

我也有类似的问题here

但是在挖掘并挖掘出真正的答案是“否”之后,没有任何官方方法支持在设计时直接将控件拖动到自定义内容控件中,< strong>甚至实现'HitTestCore'为Stephan's答案表明,不能在设计时为ContentControl设置拖放。

出于此目的,您应该考虑继承Grid或Panel(允许多个子控件)或Border(允许单个子级)。

答案 2 :(得分:0)

我在编写内容控件时遇到了同样的问题,并找到了一个简单的解决方案 StackOverflow thread

只需实施HitTestCore方法:

protected override System.Windows.Media.HitTestResult HitTestCore(System.Windows.Media.PointHitTestParameters hitTestParameters)
{
    return new PointHitTestResult(this, hitTestParameters.HitPoint);
}