У меня есть WPF DataGrid.ContextMenu XAML, определенный так:
<DataGrid.ContextMenu>
<ContextMenu >
<MenuItem x:Name="mChangeVessel" Header="Change Vessel" />
<MenuItem x:Name="mChangeVoyage" Header="Change Voyage" />
</ContextMenu>
</DataGrid.ContextMenu>
VB Обработчик:
Private Sub mChangeVessel_Click(sender As Object, e As RoutedEventArgs) Handles mChangeVessel.Click
Try
MessageBox.Show("Vessel Changed", "Test Message", MessageBoxButton.OK, MessageBoxImage.Information)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error)
End Try
End Sub
Private Sub mChangeVoyage_Click(sender As Object, e As RoutedEventArgs) Handles mChangeVoyage.Click
Try
MessageBox.Show("Voyage Changed", "Test Message", MessageBoxButton.OK, MessageBoxImage.Information)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error)
End Try
End Sub
На 4 из 5 компьютеров, на которых я запускаю приложение, оно работает нормально. На моем ноутбуке (где я провел обширное тестирование своего приложения и до сих пор у меня не было проблем), когда я щелкаю правой кнопкой мыши по сетке данных, мое приложение просто умирает. Вы можете видеть, что я пытался добавить некоторую обработку ошибок, но она не попала туда.
Мне кажется, что это проблема зависимости фреймворка .NET, но мне кажется, что на всех машинах установлена последняя версия (4.7 ish).
Стоит ли ориентироваться на другую версию .NET Framework? Я нацеливаюсь на 4,5
Для чего нужны версии .NET «профиль клиента»?
Если эти вопросы .NET Framework вызывают неправильное дерево, кто-нибудь может подсказать, как мне отладить эту проблему? У меня нет Visual Studio на ноутбуке.
Edit:
Я добавил исключение из журнала событий приложений Windows. Кто-нибудь может указать мне правильное направление для решения этой проблемы? Я хотел бы сделать проверку зависимостей, чтобы убедиться, что на моей целевой машине есть все необходимые библиотеки. Каков наилучший способ сделать это?
Ошибка:
Application: WinnipegWpf.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentNullException
at System.Windows.Automation.Peers.DataGridItemAutomationPeer..ctor(System.Object, System.Windows.Automation.Peers.DataGridAutomationPeer)
at System.Windows.Automation.Peers.DataGridAutomationPeer.CreateItemAutomationPeer(System.Object)
at System.Windows.Automation.Peers.ItemsControlAutomationPeer.FindOrCreateItemAutomationPeer(System.Object)
at System.Windows.Automation.Peers.DataGridAutomationPeer.RaiseAutomationSelectionEvents(System.Windows.Controls.SelectionChangedEventArgs)
at System.Windows.Controls.DataGrid.OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs)
at System.Windows.Controls.Primitives.Selector+SelectionChanger.End()
at System.Windows.Controls.DataGrid.MakeFullRowSelection(ItemInfo, Boolean, Boolean)
at System.Windows.Controls.DataGrid.HandleSelectionForCellInput(System.Windows.Controls.DataGridCell, Boolean, Boolean, Boolean)
at System.Windows.Controls.DataGrid.OnContextMenuOpening(System.Windows.Controls.ContextMenuEventArgs)
at System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate, System.Object)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows.RoutedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean)
at System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject, System.Windows.RoutedEventArgs)
at System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs)
at System.Windows.Controls.PopupControlService.RaiseContextMenuOpeningEvent(System.Windows.IInputElement, Double, Double, Boolean)
at System.Windows.Controls.PopupControlService.ProcessMouseUp(System.Object, System.Windows.Input.MouseButtonEventArgs)
at System.Windows.Controls.PopupControlService.OnPostProcessInput(System.Object, System.Windows.Input.ProcessInputEventArgs)
at System.Windows.Input.InputManager.RaiseProcessInputEventHandlers(System.Windows.Input.ProcessInputEventHandler, System.Windows.Input.ProcessInputEventArgs)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs)
at System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr, System.Windows.Input.InputMode, Int32, System.Windows.Input.RawMouseActions, Int32, Int32, Int32)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr, MS.Internal.Interop.WindowMessage, IntPtr, IntPtr, Boolean ByRef)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
at System.Windows.Application.RunDispatcher(System.Object)
at System.Windows.Application.RunInternal(System.Windows.Window)
at WinnipegWpf.Application.Main()