添加的 Thumb 未呈现
Added Thumb not rendered
我想实现我自己的从 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);
}
}
您需要覆盖 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;
}
如果你想要更多的子元素,你应该使用某种集合来存储子元素,然后你将return集合的计数或集合的适当元素。
我想实现我自己的从 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);
}
}
您需要覆盖 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;
}
如果你想要更多的子元素,你应该使用某种集合来存储子元素,然后你将return集合的计数或集合的适当元素。