nullReferenceException将对象添加到网格

时间:2012-07-02 11:58:14

标签: c# windows-phone-7 object grid

每当我尝试将tileSlider添加到网格时,都会导致NRE。我无法解释为什么,希望你们中的某个人可以帮助我。

EDIT2: tileSlider是此处提供的自定义控件:http://tileslider.codeplex.com/ 我尝试在我的应用程序中使用它,但未能在c#-code后面实现它。

代码:

    private void addNormalTiles()
    {
        foreach (KeyValuePair<TileSlider, int[]> slider in (App.Current as App).normalTiles)
        {
            TileSlider x = slider.Key;
            x.Size = 228;
            Grid.SetColumnSpan(x, 2);
            Grid.SetRowSpan(x, 2);
            Grid.SetRow(x, slider.Value[0]);
            Grid.SetColumn(x, slider.Value[1]);
            ContentPanel.Children.Add(x);
        }
    }

感谢

编辑:

   System.NullReferenceException wurde nicht behandelt. 
   Message=NullReferenceException StackTrace: at     
   ScottIsAFool.Controls.TileSlider.TileSlider_Loaded(Object sender, RoutedEventArgs e)
   at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate       
   handlerDelegate, Object sender, Object args)
   at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs,
   Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName) 

3 个答案:

答案 0 :(得分:2)

我认为这两个小组问题中的一个可能是你的问题。来自文档备注;

  • 不要将此集合与派生的Panel类一起使用;改为使用InternalChildren集合。

  • 如果Panel是数据绑定的,则此属性返回null。

http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.aspx

答案 1 :(得分:1)

考虑到您编写的代码,很难知道。堆栈跟踪会有所帮助。可能的选择:

  • App.Current可能不是App(演员比使用as更好,因为您无条件地使用它)
  • App.Current可能为null
  • App.Current.normalTiles
  • slider.Key可以为null
  • Grid可以为null
  • slider.Value可以为null
  • ContentPanel可以为null
  • ContentPanel.Children可以为null

堆栈跟踪应该为您提供一些帮助,以确定哪些是这种情况。明智地使用调试器(在foreach语句上设置断点)也应该有所帮助。

答案 2 :(得分:1)

在方法的顶部粘贴断点,逐行逐步执行,并在运行该行之前(在监视窗口中或将鼠标悬停在实例上)查看每个对象的值。您正在寻找该变量/实例的值是null

我会从:

开始
(App.Current as App).normalTiles

此行可能有3个错误:App.Current为空,App.Current as App产生空,因为.Current为空或不是App,或{{1}是空的。