2017-02-01 163 views
0

我想創建一個從網格繼承的新類,但由於某種原因它不起作用,我不知道爲什麼。創建一個自定義的網格

首先,我得到這個錯誤:

應用程序崩潰:委託實例方法不能爲空「這個」。

我找到的主題沒有幫助我。我不知道爲什麼「這個」應該爲空。該錯誤的行是底部代碼上的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的內部大小。

+0

您需要與崩潰(或向上堆棧跟蹤從線路中添加代碼你的自定義網格類)。這只是一個類定義。 – Sefe

+0

我可以知道創建自定義背後的目的,儘管內建幾乎可以處理所有事情。 –

+0

創建自定義網格的原因是,我想將代碼從主網格移出頁面,因爲它已經變得太大了,我只想爲我的主網​​格中的每個單元格創建一個自定義網格。佈局代碼應該位於自定義網格中,因此它知道如何處理我給它的數據,比如配置字典。 –

回答

0

Sunsteen Wu的自定義面板評論中的例子確實幫助我。我不得不改變一些元素,但這是小事。

這又是:

您也可以嘗試custom panel - Sunteen武 - MSFT 2月14日9點25