c# - NControl 绘制方法未触发

标签 c# xamarin custom-controls

我最近发现了可与 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 上找到的示例这似乎也不起作用。

提前致谢!

最佳答案

  1. 确保在 Forms.Init() 之后调用 NControlViewRenderer.Init()
  2. public override void Draw(NGraphics.ICanvas canvas, NGraphics.Rect rect) 中,您不一定需要调用 base.Draw()
  3. 尝试调用 CustomGrid.Invalidate(),这应该会强制重绘
  4. 确保您的控件确实在屏幕上,在视口(viewport)内并且大小大于 0,0,您可以给它一个粉红色的背景,看看它是否显示在任何地方...
  5. 为什么你说 到目前为止看起来很棒。 显然不是?例如,哪一部分真正起作用了?
  6. 在子类的构造函数中设置一个断点,看看它是否真的被实例化了...

这些有帮助吗?

关于c# - NControl 绘制方法未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31975441/

相关文章:

c# - 在 Repeater 内的 Lightbox 内查找 RadioButton 的选定值

json - Xamarin + JSON.Net

vb.net - 如何在 vb.net 中淡入和淡出自定义面板控件

c# - CloudStorageAccount,发出 TableQuery 请求

c# - 如何异步加载和显示图像

c# - ASP.NET 和 Neo4jClient - 在哪里存储连接?

c# - Xamarin 仅在设备上丢失了自定义对象类别(发送到实例的无法识别的选择器)

c# - .Net 相当于 Swift 映射和归约

asp.net - Ninject、ASP.NET 和自定义控件

objective-c - 创建自定义 UITableViewCell