내 요구 사항에 맞게 스타일이 지정된 DataGrid가 있습니다. 각 DataGrid 행은 7 개의 열로 구성됩니다. 각 열의 데이터 형식은 다음과 같습니다.WPF DataGrid 선택
Column 1 - TextBox
Column 2 - ComboBox
Column 3 - TextBlock
Column 4 - TextBox
Column 5 - TextBox
Column 6 - TextBox
Column 7 - TextBlock
는 제가 선택 또는 코드 (토글 선택)를 사용하여 클릭을 행 해제 된 데이터 그리드의 PreviewMouseLeftButtonDown 대한 이벤트 핸들러를 갖는다. 응용 프로그램에 버튼이 있습니다.이 버튼을 누르면 데이터 격자의 선택 모드가 Microsoft.Windows.Controls.DataGridSelectionMode.Extended
으로 설정됩니다.
지금까지 모든 것이 제대로 작동합니다.
그러나 다음 시나리오를 고려하십시오.
DataGrid의 선택 모드는 DataGridSelectionMode.Extended입니다. 이제 콤보 상자를 클릭하면 해당 드롭 다운 메뉴가 열립니다. 콤보 상자의 드롭 다운 스크롤 막대를 누르면 DataGrid의 모든 선택된 항목이 선택 취소됩니다. 호출 스택 그것에 은 인해 호출 스택에 표시되는 내용
HandleSelectionForCellInput(
Microsoft.Windows.Controls.DataGridCell cell = {Microsoft.Windows.Controls.DataGridCell},
bool startDragging = true,
bool allowsExtendSelect = true,
bool allowsMinimalSelect = true
)
은 아래와 같다 DataGrids를 내부 방법에서 발생하는 이벤트를 발생하는 것을 도시한다.
PresentationFramework.dll!System.Windows.Controls.SelectionChangedEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x27 bytes
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {Microsoft.Windows.Controls.DataGrid Items.Count:148}, System.Windows.RoutedEventArgs args = {System.Windows.Controls.SelectionChangedEventArgs}, bool reRaised = false) + 0x1bf bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {Microsoft.Windows.Controls.DataGrid Items.Count:148}, System.Windows.RoutedEventArgs args = {System.Windows.Controls.SelectionChangedEventArgs}) + 0x79 bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs e) + 0x17 bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e) + 0x5 bytes
WPFToolkit.dll!Microsoft.Windows.Controls.DataGrid.OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e = {System.Windows.Controls.SelectionChangedEventArgs}) + 0x1ef bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.InvokeSelectionChanged(System.Collections.Generic.List<object> unselectedItems, System.Collections.Generic.List<object> selectedItems) + 0x4c bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.SelectionChanger.End() + 0xe1 bytes
PresentationFramework.dll!System.Windows.Controls.SelectedItemCollection.EndUpdateSelectedItems() + 0x3b bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.MultiSelector.EndUpdateSelectedItems() + 0x30 bytes
WPFToolkit.dll!Microsoft.Windows.Controls.DataGrid.MakeFullRowSelection(object dataItem = {ePlace.PackageInfo}, bool allowsExtendSelect = true, bool allowsMinimalSelect = true) + 0x85a bytes
WPFToolkit.dll!Microsoft.Windows.Controls.DataGrid.HandleSelectionForCellInput(Microsoft.Windows.Controls.DataGridCell cell = {Microsoft.Windows.Controls.DataGridCell}, bool startDragging = true, bool allowsExtendSelect = true, bool allowsMinimalSelect = true) + 0x6b bytes
WPFToolkit.dll!Microsoft.Windows.Controls.DataGridCell.OnAnyMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) + 0x155 bytes
WPFToolkit.dll!Microsoft.Windows.Controls.DataGridCell.OnAnyMouseLeftButtonDownThunk(object sender = {Microsoft.Windows.Controls.DataGridCell}, System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) + 0x4f bytes
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x27 bytes
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {Microsoft.Windows.Controls.DataGridCell}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = true) + 0x1bf bytes
PresentationCore.dll!System.Windows.UIElement.ReRaiseEventAs(System.Windows.DependencyObject sender = {Microsoft.Windows.Controls.DataGridCell}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, System.Windows.RoutedEvent newEvent) + 0x10a bytes
PresentationCore.dll!System.Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent(System.Windows.DependencyObject sender, System.Windows.Input.MouseButtonEventArgs e) + 0x2e bytes
PresentationCore.dll!System.Windows.UIElement.OnMouseDownThunk(object sender, System.Windows.Input.MouseButtonEventArgs e) + 0xde bytes
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x27 bytes
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {System.Windows.Controls.TextBlock}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false) + 0x1bf bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {System.Windows.Controls.TextBlock}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0x79 bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool trusted) + 0x35 bytes
PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea() + 0x311 bytes
PresentationCore.dll!System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs input) + 0x42 bytes
PresentationCore.dll!System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport) + 0x62 bytes
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.ReportInput(System.IntPtr hwnd, System.Windows.Input.InputMode mode, int timestamp, System.Windows.Input.RawMouseActions actions, int x, int y, int wheel) + 0x2e2 bytes
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.FilterMessage(System.IntPtr hwnd = 2819506, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 45155482, ref bool handled = false) + 0x4e1 bytes
PresentationCore.dll!System.Windows.Interop.HwndSource.InputFilterMessage(System.IntPtr hwnd = 2819506, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 45155482, ref bool handled = false) + 0x75 bytes
WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = 2819506, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 45155482, ref bool handled = false) + 0xbe bytes
WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) + 0x7a bytes
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback = {Method = {System.Object DispatcherCallbackOperation(System.Object)}}, object args = {MS.Win32.HwndSubclass.DispatcherOperationCallbackParameter}, bool isSingleParameter = true) + 0x8a bytes
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate callback, object args, bool isSingleParameter, System.Delegate catchHandler = null) + 0x4a bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate callback, object args, bool isSingleParameter, System.Delegate catchHandler) + 0x44 bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, bool isSingleParameter) + 0x91 bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority priority, System.Delegate method, object arg) + 0x40 bytes
WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = 2819506, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 45155482) + 0xdc bytes
[Native to Managed Transition]
[Managed to Native Transition]
WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame = {System.Windows.Threading.DispatcherFrame}) + 0xc7 bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame frame) + 0x49 bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.Run() + 0x4c bytes
PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore) + 0x1e bytes
PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window) + 0x6f bytes
PresentationFramework.dll!System.Windows.Application.Run(System.Windows.Window window) + 0x26 bytes
PresentationFramework.dll!System.Windows.Application.Run() + 0x19 bytes
ePlace.exe!ePlace.App.Main() + 0x5e bytes C#
[Native to Managed Transition]
[Managed to Native Transition]
mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x3a bytes
Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() + 0x2b bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x66 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes
이제는 DataGrid에서 선택한 내부 호출을 피하고 싶습니다. 그것을 할 방법이 있습니까?