2013-07-16 84 views
0

好吧,所以我有這個代碼,一般建立一個屏幕,然後在網格中的第3列添加後,我打破for循環,然後它看起來像這樣。視覺工作室的災難性錯誤,對於Windows Phone 8

CODE:

private void buildScreen() 
{ 
    try 
    { 
     foreach (var block in WorkflowBase.ViewModel_WFTransaction.Transaction.Form.Blocks.Where(item => item.blockType == AccTech.WP8.Workflow.DataModels.BlockAttributes.BlockType.DetailGrid)) 
     { 
      myscroller = new ScrollViewer(); 
      myscroller.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; 
      myscroller.VerticalAlignment = System.Windows.VerticalAlignment.Stretch; 
      myscroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible; 

      Grid grid = new Grid(); 
      grid.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; 
      grid.VerticalAlignment = System.Windows.VerticalAlignment.Stretch; 

      foreach (var field in block.Fields) 
      { 
       if (field.PhoneField == true) 
       { 
        int count = block.Fields.IndexOf(field); 
        ColumnDefinition c1 = new ColumnDefinition(); 
        //c1.Width = new GridLength(1000, GridUnitType.Star);       
        grid.ColumnDefinitions.Add(c1); 

        TextBlock headers = new TextBlock(); 
        headers.Tap += headers_Tap; 
        headers.Text = field.FieldDescLoc.ToString(); 
        headers.Name = field.ColumnName; 
        headers.Foreground = new SolidColorBrush(Colors.Black); 
        headers.FontSize = 22; 
        headers.TextWrapping = TextWrapping.Wrap; 
        headers.SetValue(Grid.ColumnProperty, count); 
        headers.Width = 100; 
        headers.Margin = new Thickness(0, 0, 10, 0); 

        if (field.FieldType == FieldAttributes.DataType.dtString) 
        { 
         headers.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; 
        } 
        else if (field.FieldType == FieldAttributes.DataType.dtInteger || field.FieldType == FieldAttributes.DataType.dtDate) 
        { 
         headers.HorizontalAlignment = System.Windows.HorizontalAlignment.Right; 
        } 
        grid.Children.Add(headers); 

        foreach (var row in block.Rows) 
        { 
          RowDefinition r1 = new RowDefinition(); 
          r1.Height = new GridLength(50, GridUnitType.Star); 
          grid.RowDefinitions.Add(r1); 

          int i = block.Rows.IndexOf(row); 
          int count2 = block.Fields.IndexOf(field); 

          TextBlock item = new TextBlock(); 
          item.Margin = new Thickness(5, 5, 5, 10); 
          item.Text = block.Rows[i].getKeyValue(field.ColumnName); 
          item.SetValue(Grid.RowProperty, i + 1); 
          item.SetValue(Grid.ColumnProperty, count2); 

          if (field.FieldType == FieldAttributes.DataType.dtString) 
          { 
           item.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; 
          } 
          else if (field.FieldType == FieldAttributes.DataType.dtInteger || field.FieldType == FieldAttributes.DataType.dtDate) 
          { 
           item.HorizontalAlignment = System.Windows.HorizontalAlignment.Right; 
          } 
          grid.Children.Add(item); 
         } 

         if (this.Orientation == PageOrientation.Portrait || this.Orientation == PageOrientation.PortraitDown || this.Orientation == PageOrientation.PortraitUp) 
         { 
          if (count >= 3) 
          { 
           myscroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; 
           break; 
          } 
         } 
        } 
       }     
       myscroller.Content = grid; 
       this.PageTilte.Text = block.BlockName.ToString(); 
       //ParentControl.Children.Clear(); 
       this.ParentControl.Children.Add(myscroller);     
      } 

屏幕如下:

Detail screen

,這樣工作得很好,現在我打開屏幕側身山水景觀,這是代碼。

private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) 
    { 
     this.ParentControl.Children.Clear(); 
     buildScreen();    
    } 

正如你可以看到我清除父控制,然後我調用的方法來再次建立屏幕!

這是我的錯誤。 enter image description here

而且天賦的豁免是空的!任何人都可以告訴我這裏有什麼問題嗎?

+0

這就是爲什麼我從不在代碼中構建UI的原因! –

+0

如果你有通用的數據和控制你真的沒有選擇嘿嘿:P – Arrie

回答

0

我找到了! ,經過幾分鐘的小心閱讀,我發現我的textblock.Name屬性變爲null,所以只需放入一個空的檢查並將名稱命名爲「」,它就起作用了!

TextBlock headers = new TextBlock(); 
         headers.Tap += headers_Tap; 
         headers.Text = field.FieldDescLoc.ToString(); 
         //headers.Name = field.FieldDescLoc; 

         if (!string.IsNullOrEmpty(field.ColumnName)) 
          headers.Name = field.ColumnName; 
         else 
          headers.Name = field.FieldDesc;