我想創建一個從網格繼承的新類,但由於某種原因它不起作用,我不知道爲什麼。創建一個自定義的網格
首先,我得到這個錯誤:
應用程序崩潰:委託實例方法不能爲空「這個」。
我找到的主題沒有幫助我。我不知道爲什麼「這個」應該爲空。該錯誤的行是底部代碼上的Task.Delay(1)。
所以基本上我想創建一個自定義的網格,從網格繼承,所以我可以使用只是這樣,但與其他屬性和一些邏輯。原因是:我想將一些代碼從可見的page.xaml.cs移動到網格本身,因此它可以進行佈局並完成剩下的操作,這對其本身來說很重要。
但是,當我在.cs中的可見頁面上使用它時,它不起作用。在xaml中沒有必要使用它。
我不知道是否有必要子類化網格,或者它是否足以創建類擴展。隨意改變我對這個話題的態度。
我的班級是這樣的:
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的內部大小。
您需要與崩潰(或向上堆棧跟蹤從線路中添加代碼你的自定義網格類)。這只是一個類定義。 – Sefe
我可以知道創建自定義背後的目的,儘管內建幾乎可以處理所有事情。 –
創建自定義網格的原因是,我想將代碼從主網格移出頁面,因爲它已經變得太大了,我只想爲我的主網格中的每個單元格創建一個自定義網格。佈局代碼應該位於自定義網格中,因此它知道如何處理我給它的數據,比如配置字典。 –