2010-02-11 5 views
0

내 요구 사항에 맞게 스타일이 지정된 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에서 선택한 내부 호출을 피하고 싶습니다. 그것을 할 방법이 있습니까?

답변

0

내부 전화 HandleSelectionForCellInput()을 피하기 위해 e.Handled = true을 설정할 수 있습니다.

확장 모드 작업에서 선택 취소를 방지합니다.