C# 控制绘制方法不触发

C# 控制绘制方法不触发,c#,xamarin,custom-controls,C#,Xamarin,Custom Controls,我最近发现了可以与Xamarin.Forms一起使用的NGraphics&NControl库,到目前为止,它看起来很棒 我遇到的问题是,draw方法从未被调用,我也不太确定哪里出了问题。下面是我的代码(我已经去掉了所有不必要的部分),非常感谢您的帮助 public class CustomGrid : NControlView { public CustomGrid () { base.Invalidate (); //Invali

我最近发现了可以与Xamarin.Forms一起使用的NGraphics&NControl库,到目前为止,它看起来很棒

我遇到的问题是,draw方法从未被调用,我也不太确定哪里出了问题。下面是我的代码(我已经去掉了所有不必要的部分),非常感谢您的帮助

public class CustomGrid : NControlView
    {
        public CustomGrid ()
        {
            base.Invalidate (); //Invalidating the control doesn't redraw the control
            Content = new Label {BackgroundColor = Xamarin.Forms.Color.Transparent};
            BackgroundColor = Xamarin.Forms.Color.Blue;
        }


        public override void Draw (NGraphics.ICanvas canvas, NGraphics.Rect rect)
        {
            base.Draw(canvas, rect);
            //foreach column draw the grid line on the right
            foreach (CustomColumn c in ColumnCollection) 
            {
                canvas.DrawLine (c.CoOrds.startX,c.CoOrds.startY, c.CoOrds.EndX, c.CoOrds.EndY,Colors.White);
            }

            //for each row draw the bottom grid line
            foreach (CustomRow r in RowCollection) 
            {
                canvas.DrawLine (r.CoOrds.startX,r.CoOrds.startY, r.CoOrds.EndX, r.CoOrds.EndY,Colors.White);
            }
        }

        public List<CustomColumn> ColumnCollection { get; set; }
        public List<CustomRow> RowCollection { get; set; }


    }
公共类CustomGrid:NControlView
{
公共自定义网格()
{
base.Invalidate();//使控件无效不会重新绘制控件
Content=newlabel{BackgroundColor=Xamarin.Forms.Color.Transparent};
BackgroundColor=Xamarin.Forms.Color.Blue;
}
公共覆盖无效绘制(NGraphics.ICanvas画布,NGraphics.Rect Rect)
{
绘制(画布、矩形);
//foreach column在右侧绘制网格线
foreach(ColumnCollection中的CustomColumn c)
{
canvas.drawine(c.CoOrds.startX、c.CoOrds.startY、c.CoOrds.EndX、c.CoOrds.EndY、Colors.White);
}
//为每行绘制底部网格线
foreach(行集合中的自定义行r)
{
canvas.drawine(r.CoOrds.startX、r.CoOrds.startY、r.CoOrds.EndX、r.CoOrds.EndY、Colors.White);
}
}
公共列表列集合{get;set;}
公共列表行集合{get;set;}
}
为了确保我没有发疯,我复制并粘贴了在上找到的示例,但这似乎也不起作用

提前谢谢你

  • 确保在
    Forms.Init()之后调用
    nControlviewrender.Init()
  • public override void Draw(NGraphics.ICanvas canvas,NGraphics.Rect Rect)
    中,您不必调用
    base.Draw()
  • 尝试调用
    CustomGrid.Invalidate()
    ,这将强制重新绘制
  • 确保你的控件确实在屏幕上,在视图端口内,并且大小大于0,0,你可以给它一个粉红色的背景,看看它是否显示在任何地方
  • 你为什么说到目前为止它看起来很棒。当它显然不存在的时候?比如说,什么部分在起作用呢
  • 在子类的构造函数中设置一个断点,看看它是否真的被实例化了

  • 这些有帮助吗?

    如果你最小化应用程序或将其移出屏幕,然后将其带回来,绘图是否有效?你在哪个平台上进行测试?使用Xamarin Player(Nexus 4)在Andorid上进行测试-使用菜单按钮选择一个新的应用程序,然后返回应用程序也无法修复。第一个解决了问题。我读了那么多次那个文档,我不知道我怎么会错过它。