截取自定义WPF画布子控件的设计时拖动和调整大小

截取自定义WPF画布子控件的设计时拖动和调整大小,wpf,canvas,design-time,adorner,arrangeoverride,Wpf,Canvas,Design Time,Adorner,Arrangeoverride,我能够将设计时装饰器添加到WPF控件中,但是如何控制内置在设计器中的那些装饰器呢?(换句话说,当任何人使用标准设计器的拇指/橡皮筋/装饰条/拖动或调整控件大小时,我希望调用我的函数) 以下是我试图实现的目标的详细信息: 我正在编写一个类似WPF画布的控件,该控件具有用于放置和调整其子级大小的自定义规则。(它也应该旋转,但这是另一个问题) 它可以工作,但是如果您尝试在设计器中拖动或调整子控件的大小,它会跳到它在正常WPF画布上的位置(即X=左,而不是ArrangeOverride指定的X=左-宽

我能够将设计时装饰器添加到WPF控件中,但是如何控制内置在设计器中的那些装饰器呢?(换句话说,当任何人使用标准设计器的拇指/橡皮筋/装饰条/拖动或调整控件大小时,我希望调用我的函数)

以下是我试图实现的目标的详细信息

我正在编写一个类似WPF画布的控件,该控件具有用于放置和调整其子级大小的自定义规则。(它也应该旋转,但这是另一个问题)

它可以工作,但是如果您尝试在设计器中拖动或调整子控件的大小,它会跳到它在正常WPF画布上的位置(即X=左,而不是ArrangeOverride指定的X=左-宽度/2)

看起来我需要控制设计师。Microsoft甚至提供了如何做到这一点的文档:。它似乎可以工作,但是我没有找到一种方法来控制内置到VisualStudio中的装饰器的工作方式(当控件被选中时,显示在控件周围的调整大小的拇指),只有如何添加新的装饰器。当然,我可以添加一些,并指示任何人不要触摸标准的,但它看起来像一个丑陋的乱七八糟

出于这个问题的目的,可以安全地假设我可以访问画布及其子级的源代码(即可以重写方法),尽管只需要更改父画布的方法是首选方法

我看起来有点困惑。我也没能在网上找到这件事。因此,任何有用的线索都将受到极大的赞赏,如书籍、文章、示例、参考源链接等

<my:MyCustomCanvas> 
    <my:SomeControl my:Name="child control #1" Canvas.Left="20"  Canvas.Top="30"/> 
    <my:SomeOtherControl my:Name="child control #2" Canvas.Left="70"  Canvas.Top="80"/> 
</my:MyCustomCanvas>
public class CustomCanvas : Canvas
{
    protected override Size ArrangeOverride(Size arrangeSize)
    {
        foreach (UIElement child in InternalChildren)
        {
            double left = child.GetValue(Canvas.LeftProperty) - this.GetValue(ActualWidthProperty) / 2;
            double top = child.GetValue(Canvas.TopProperty) - this.GetValue(ActualHeightProperty) / 2;
            child.Arrange(new Rect(new Point(left, top), child.DesiredSize));
        }
        return arrangeSize;
    }
}