2016-02-03 7 views
1

Я хочу реализовать свой собственный элемент управления, полученный из FrameworkElement, но добавленные дочерние элементы не отображаются.Добавлен Thumb not rendered

Я понятия не имею, почему.

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

Вы должны переопределить 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; 
} 

В случае, если вы хотите больше дочерних элементов, вы должны использовать какой-то из коллекции для хранения дочерних элементов, а затем вы будете возвращены подсчет коллекции, или соответствующий элемент коллекции.

+0

Благодарим за помощь. Он работает сейчас. –