添加了Thumb未呈现

时间:2016-02-03 12:07:42

标签: c# wpf frameworkelement

我想实现自己从FrameworkElement派生的控件,但是不会渲染添加的子元素。

我不知道为什么。

public class RangeSelection : FrameworkElement
{
    private Thumb thumb = null;

    #region Construction / Destruction

    public RangeSelection()
    {
        this.thumb = new Thumb();
        this.thumb.Width    = 32.0;
        this.thumb.Height   = 32.0;
        this.AddVisualChild(this.thumb);

    }

    #endregion

    protected override Size MeasureOverride(Size availableSize)
    {
        this.thumb.Measure(availableSize);
        return new Size(64.0, 64.0);
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        this.thumb.Arrange(new Rect(0, 0, 64.0, 64.0));
        return base.ArrangeOverride(finalSize);
    }
}

1 个答案:

答案 0 :(得分:1)

您需要覆盖VisualChildrenCount属性和GetVisualChild方法。像这样:

protected override int VisualChildrenCount
{
    get { return thumb == null ? 0 : 1; }
}

protected override Visual GetVisualChild(int index)
{
    if (_child == null)
    {
        throw new ArgumentOutOfRangeException();
    }

    return _child;
}

如果你想要更多的子元素,你应该使用某种集合来存储子元素,然后你将返回集合的数量或集合的适当元素。