如何覆盖WPF中Canvas类的Children.Add方法

时间:2012-04-30 23:47:01

标签: c# wpf canvas overrides

我已经有了一个Custom Canvas类,其中我已经覆盖了' OnMoseDown'方法。 但现在我也想覆盖“孩子们。添加'方法。 但我没有找到任何解决方案。

我希望在将子项添加到画布时获取Child.ActualWidth。

感谢。

2 个答案:

答案 0 :(得分:1)

我自己找到了自己的答案。希望这可能在某一天帮助某人。

刚在我的自定义类

中添加了一个Add方法
public void Add(UserControl element)
{
    bool alreadyExist = false;
    element.Uid = element.Name;
    foreach (UIElement child in this.Children)
    {
        if (child.Uid == element.Uid)
        {
            alreadyExist = true;
            this.BringToFront(child);
        }
    }
    if (!alreadyExist)
    {
        this.Children.Add(element);
        this.UpdateLayout();
        double top = (this.ActualHeight - element.ActualHeight) / 2;
        double left = (this.ActualWidth - element.ActualWidth) / 2;
        Canvas.SetLeft(element, left);
        Canvas.SetTop(element, top);
    }
}        

答案 1 :(得分:0)

这可能无法正常工作。在设置ActualWidth之前,将添加一个子项,因为该属性在布局阶段设置。

根据您在此处的目标,您可能需要考虑改为覆盖MeasureOverrideArrangeOverride,而不是making a custom layout panel而不是继承Canvas