每当我尝试将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)
答案 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}是空的。