创建自定义网格

时间:2017-02-01 11:28:00

标签: c# .net uwp

我想创建一个继承自Grid的新类,但由于某些原因它不能工作,我不知道为什么。

首先我收到此错误:

应用程序崩溃:委托给实例方法不能为空'这个'。

我找到的主题对我没有帮助。我不知道为什么"这个"应为null。此错误的行是底部代码上的Task.Delay(1)。

所以基本上我想创建一个自定义网格,继承自网格,所以我可以使用它,但有其他属性和一些逻辑。原因是:我想将一些代码从可见的page.xaml.cs移动到Grid本身,因此它可以布局并完成剩下的工作,只对自身很重要。

但是当我在.cs的可见页面上使用它时,它不起作用。没有必要在xaml中使用。

我不知道是否有必要继承Grid,或者是否足以创建类扩展。随意改变我对该主题的看法。

My Class看起来像这样:

CustomGrid.cs

namespace Solution
{
    class CustomGrid : Grid
    {
        private GridConfiguration config;
        MainViewModel mainViewModel;

        public CustomGrid(GridConfiguration initialConfig)
        {
            config = initialConfig;
            SetValue(RowProperty, config.Pos.Y);
            SetValue(ColumnProperty, config.Pos.X);
        }

        public void Unload()
        {

        }

        public void LoadAnotherConfig (GridConfiguration newConfig)
        {
            unload();
            config = newConfig;
        }

        private void setUpGrid()
        {
            switch (config.Type.ToLower())
                {
                    case "html":
                        GenerateWebView();
                        break;
                    case "pdf":
                        GeneratePdf();
                        break;
                    case "image":
                        GenerateImage();
                        break;
                    case "video":
                        GenerateVideo();
                        break;
                    default:
                        GeneratePlaceHolder();
                        break;
                }
        }
    }
}

我正在创建和添加它们的地方在这里:

List<Dictionary> allCellsToPresent ) new List<Dictionary>();

private async void GeneratePage()
{
    foreach (var cellInfo in allCellsToPresent)
        {
            //create custom grid for each cellInfo
            CustomGrid grid = new CustomGrid(cellInfo);
            grid.SetUpGrid();
            Tapped += Grid_Tapped;
            MainGrid.Children.Add(grid);
        }
    await Task.Delay(100);
    ScrollViewer.ChangeView( 0, 0, 1, false);
}

MainGrid放置在ScrollViewer中以进行滚动和缩放。我必须等待任何Task.Delay,以便之前启动的进程将在动画之前完成,否则动画期间会出现毛刺,因为MainGrid仍会添加一些子项并更改ScrollViewers内部大小。

1 个答案:

答案 0 :(得分:0)

Sunsteen Wu在自定义面板的评论中的例子确实帮助了我。我不得不改变一些元素,但那是次要的。

又来了:

您也可以尝试custom panel - Sunteen Wu - MSFT 2月14日9:25