首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在另一个FrameworkElement中绘制FrameworkElement

在另一个FrameworkElement中绘制FrameworkElement
EN

Stack Overflow用户
提问于 2010-04-01 05:03:59
回答 2查看 694关注 0票数 1
代码语言:javascript
复制
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中:

代码语言:javascript
复制
<local:VisualCue x:Name="visualCue">
 <local:VisualCue.Indicators>
  <local:Indicator />
 </local:VisualCue.Indicators>
</local:VisualCue>

但是指示器并没有被画出来。我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2012-07-30 03:51:50

您是否尝试过实现LogicalChildren方法?

代码语言:javascript
复制
protected override IEnumerator LogicalChildren
{
    get { return indicators.GetEnumerator(); }
}

当我开发我的第一个'FrameworkElement`‘时,我遇到了各种各样的麻烦。

经过广泛的研究,我基本上发现,为了让能够很好地与WPF配合使用,有许多方法可以让重写。

票数 1
EN

Stack Overflow用户

发布于 2010-04-01 06:56:56

至少你需要覆盖VisualCue中的ArrangeOverride:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2556439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档