我有一个应用程序,它在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.Application.Run()
在 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()
这一切都发生在外部代码中。 我尝试从DataGrid继承,重写ApplyTemplate方法并在其中放置try catch。但似乎这是不允许的,并且由此产生的控制无法使用。 对于如何解决这个问题,有任何的建议吗? 谢谢
答案 0 :(得分:0)
它看起来像一个错误,你应该联系微软支持团队。但还有其他选择,你可以尝试一下。
Here您可以找到DataGridColumnHeader源代码的测试版。
根据该源代码,我的猜测是,如果您关闭列调整大小或与列标题相关的任何内容"" Grip"区域它可能不再抛出异常。