0

每当我尝试将 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) 
4

3 回答 3

2

我认为这两个小组问题之一可能是您的问题。从文档注释中;

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

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

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

于 2012-07-02T12:15:39.727 回答
1

好吧,鉴于您编写的代码,很难知道。堆栈跟踪会有所帮助。可能的选项:

  • App.Current可能不是(考虑到您无条件地使用它,App演员比在这里使用更好)as
  • App.Current可能为空
  • App.Current.normalTiles
  • slider.Key可能为空
  • Grid可能为空
  • slider.Value可能为空
  • ContentPanel可能为空
  • ContentPanel.Children可能为空

堆栈跟踪应该可以帮助您确定哪种情况foreach明智地使用调试器(在语句上放置断点)也应该有所帮助。

于 2012-07-02T12:01:07.133 回答
1

在方法的顶部放置一个断点,逐行遍历它,并在运行该行之前查看每个对象的值(在您的监视窗口中,或将鼠标悬停在实例上)。您正在寻找该变量/实例的值何时为null.

我将从:

(App.Current as App).normalTiles

这一行可能有 3 个问题:App.Currentis null,App.Current as App产生 null 因为.Current是 null 或不是 an App,或者normalTiles是 null。

于 2012-07-02T12:01:40.147 回答