NControl 绘制方法未触发
NControl draw method not firing
我最近发现了可以与 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; }
}
为了确保我没有发疯,我复制并粘贴了在 NControl GitHub Repo 上找到的示例,但这似乎也不起作用。
提前致谢!
- 确保在
Forms.Init()
之后调用 NControlViewRenderer.Init()
- 在
public override void Draw(NGraphics.ICanvas canvas, NGraphics.Rect rect)
中你不一定需要调用base.Draw()
- 尝试调用
CustomGrid.Invalidate()
,这应该会强制重绘
- 确保您的控件确实在屏幕上,在视口内并且大小大于 0,0,您可以给它一个粉红色的背景,看看它是否显示在任何地方...
- 为什么你说 到目前为止看起来很棒。 显然不是?比如说,哪一部分真正起作用了?
- 在子类的构造函数中设置一个断点,看看它是否真的被实例化了...
这些有帮助吗?
我最近发现了可以与 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; }
}
为了确保我没有发疯,我复制并粘贴了在 NControl GitHub Repo 上找到的示例,但这似乎也不起作用。
提前致谢!
- 确保在
Forms.Init()
之后调用 - 在
public override void Draw(NGraphics.ICanvas canvas, NGraphics.Rect rect)
中你不一定需要调用base.Draw()
- 尝试调用
CustomGrid.Invalidate()
,这应该会强制重绘 - 确保您的控件确实在屏幕上,在视口内并且大小大于 0,0,您可以给它一个粉红色的背景,看看它是否显示在任何地方...
- 为什么你说 到目前为止看起来很棒。 显然不是?比如说,哪一部分真正起作用了?
- 在子类的构造函数中设置一个断点,看看它是否真的被实例化了...
NControlViewRenderer.Init()
这些有帮助吗?