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

如何使自定义WPF ContentControl在设计时支持拖放?,wpf,user-controls,Wpf,User Controls,我想创建自定义WPF控件,该控件内部只有一个“子”控件。子类化ContentControl或UserControl可以工作,但有一个缺陷:这些控件在设计器模式下不工作 我所说的“不工作”是指这个场景:假设我有一个Canvas,其中包含我的自定义控件。比如说,我想把一个按钮放在我的控制范围内。我从工具箱中拖动它,它显示在我的控件中。但是,XAML视图显示新按钮实际上属于画布,而不是我的控件 我可以通过手动编辑XAML将其置于我的控制之下,但我希望设计器也能工作 有趣的是,当我将Canvas、Gri

我想创建自定义WPF控件,该控件内部只有一个“子”控件。子类化
ContentControl
UserControl
可以工作,但有一个缺陷:这些控件在设计器模式下不工作

我所说的“不工作”是指这个场景:假设我有一个
Canvas
,其中包含我的自定义控件。比如说,我想把一个
按钮
放在我的控制范围内。我从工具箱中拖动它,它显示在我的控件中。但是,XAML视图显示新按钮实际上属于
画布
,而不是我的控件

我可以通过手动编辑XAML将其置于我的控制之下,但我希望设计器也能工作

有趣的是,当我将
Canvas
Grid
Panel
子类化时,设计器会按预期工作。但是,这些控件有很多子控件,这不是我需要的


如何使单个子控件在设计器中工作?

如何从
边框继承?这样,您就不用再为设计器的可扩展性烦恼了

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

只需实现
HitTestCore
方法:

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

我也有一个类似的问题

但是在挖掘和挖掘之后,真正的答案是“否”,没有任何官方方法支持在设计时将控件直接拖动到自定义内容控件中,即使如答案所示实现“HitTestCore”,也不会在设计时为ContentControl启用拖放功能


对于这样的目的,您应该考虑从网格或面板继承(允许多个子控件)或边框(允许单子)。

这是一个很好的链接,看起来您需要一组具有设计时功能的CalsSe,对不起,伙计,我不是有意投票否决的。我如何还原它?@Dmitry我还没有通过你的链接找到答案,但它对我必须做的其他WPF工作仍然很有帮助,谢谢。@Dmitry:我做了一个“编辑”,看看你现在是否可以还原你的否决票。