DataGrid抛出NullReferenceException

时间:2014-03-04 09:02:39

标签: wpf exception datagrid tabcontrol

我有一个应用程序,它在TabControl的tabitems中显示一些数据网格。在其中一个部署的计算机上 - 只有一个 - 切换选项卡会在没有任何警告的情况下崩溃应用程序。 我没办法在那台机器上调试应用程序。我在崩溃时唯一的指示来自事件查看器。这是异常堆栈跟踪:

  

框架版本:v4.0.30319描述:该过程已终止   由于未处理的异常。例外信息:   System.NullReferenceException Stack:at   System.Windows.Controls.Primitives.DataGridColumnHeader.SetLeftGripperVisibility()   在   System.Windows.Controls.Primitives.DataGridColumnHeader.HookupGripperEvents()   在System.Windows.FrameworkElement.ApplyTemplate()at   System.Windows.FrameworkElement.MeasureCore(System.Windows.Size)at   System.Windows.UIElement.Measure(System.Windows.Size)at   System.Windows.Controls.DataGridCellsPanel.MeasureChild(System.Windows.UIElement,   System.Windows.Size)at   System.Windows.Controls.DataGridCellsPanel.GenerateChild(System.Windows.Controls.Primitives.IItemContainerGenerator,   System.Windows.Size,System.Windows.Controls.DataGridColumn,Int32   ByRef,System.Windows.Size ByRef)at   System.Windows.Controls.DataGridCellsPanel.GenerateChild(System.Windows.Controls.Primitives.IItemContainerGenerator,   System.Windows.Size,System.Windows.Controls.DataGridColumn,   System.IDisposable ByRef,Int32 ByRef,System.Windows.Size ByRef)
  在   System.Windows.Controls.DataGridCellsPanel.DetermineRealizedColumnsBlockList(System.Windows.Size)   在   System.Windows.Controls.DataGridCellsPanel.MeasureOverride(System.Windows.Size)   在System.Windows.FrameworkElement.MeasureCore(System.Windows.Size)
  在System.Windows.UIElement.Measure(System.Windows.Size)at   System.Windows.ContextLayoutManager.UpdateLayout()at   System.Windows.ContextLayoutManager.UpdateLayoutCallback(System.Object的)   在System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
  在   System.Windows.Media.MediaContext.RenderMessageHandlerCore(System.Object的)   在   System.Windows.Media.MediaContext.RenderMessageHandler(System.Object的)   在   System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate,   System.Object,Int32)at   MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object的,   System.Delegate,System.Object,Int32,System.Delegate)at   System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate,   System.Object,Int32,System.Delegate)at   System.Windows.Threading.DispatcherOperation.InvokeImpl()at   System.Threading.ExecutionContext.runTryCode(System.Object)at   System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode,   CleanupCode,System.Object)at   System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,   System.Threading.ContextCallback,System.Object,Boolean)at   System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,   System.Threading.ContextCallback,System.Object)at   System.Windows.Threading.DispatcherOperation.Invoke()at   System.Windows.Threading.Dispatcher.ProcessQueue()at   System.Windows.Threading.Dispatcher.WndProcHook(IntPtr,Int32,IntPtr,   Int.Ptr,布尔ByRef)在MS.Win32.HwndWrapper.WndProc(IntPtr,   Int32,IntPtr,IntPtr,Boolean ByRef)at   MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)at at   System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate,   System.Object,Int32)at   MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object的,   System.Delegate,System.Object,Int32,System.Delegate)at   System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate,   System.Object,Int32,System.Delegate)at   System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority,   System.TimeSpan,System.Delegate,System.Object,Int32)at   MS.Win32.HwndSubclass.SubclassWndProc(IntPtr,Int32,IntPtr,IntPtr)
  在   MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG   ByRef)at   System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)   在System.Windows.Application.RunInternal(System.Windows.Window)处   MyApp.App.Main()

中的System.Windows.Application.Run()

这一切都发生在外部代码中。 我尝试从DataGrid继承,重写ApplyTemplate方法并在其中放置try catch。但似乎这是不允许的,并且由此产生的控制无法使用。 对于如何解决这个问题,有任何的建议吗? 谢谢

1 个答案:

答案 0 :(得分:0)

它看起来像一个错误,你应该联系微软支持团队。但还有其他选择,你可以尝试一下。

Here您可以找到DataGridColumnHeader源代码的测试版。

修改

根据该源代码,我的猜测是,如果您关闭列调整大小或与列标题相关的任何内容"" Grip"区域它可能不再抛出异常。