public class VisualCue : FrameworkElement
{
public List<Indicator> Indicators { get; set; }
public VisualCue()
{
this.Indicators = new List<Indicator>();
}
protected override int VisualChildrenCount
{
get { return this.Indicators.Count; }
}
protected override Visual GetVisualChild(int index)
{
return this.Indicators[index];
}
}
public class Indicator : FrameworkElement
{
protected override void OnRender(DrawingContext context)
{
context.DrawEllipse(Brushes.Red,
new Pen(Brushes.Black, 2), new Point(0, 0), 10, 10);
base.OnRender(context);
}
}在XAML中:
<local:VisualCue x:Name="visualCue">
<local:VisualCue.Indicators>
<local:Indicator />
</local:VisualCue.Indicators>
</local:VisualCue>但是指示器并没有被画出来。我遗漏了什么?
发布于 2012-07-30 03:51:50
您是否尝试过实现LogicalChildren方法?
protected override IEnumerator LogicalChildren
{
get { return indicators.GetEnumerator(); }
}当我开发我的第一个'FrameworkElement`‘时,我遇到了各种各样的麻烦。
经过广泛的研究,我基本上发现,为了让能够很好地与WPF配合使用,有许多方法可以让重写。
发布于 2010-04-01 06:56:56
至少你需要覆盖VisualCue中的ArrangeOverride:
protected override Size ArrangeOverride(Size finalSize)
{
foreach (Indicator indicator in Indicators)
{
indicator.Arrange(new Rect(0, 0, 10, 10));
}
return finalSize;
}传递给指示器子代的Rect中的值取决于您的布局需求。您还应该覆盖MeasureOverride。
FrameworkElement.ArrangeOverride method
FrameworkElement.MeasureOverride method
https://stackoverflow.com/questions/2556439
复制相似问题