Dreamine.UI.Wpf 1.0.1
Dreamine.UI.Wpf 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
DataGridBehaviors.cs
이 파일의 문서화 페이지로 가기
1using System.Windows;
2using System.Windows.Controls;
3using System.Windows.Input;
4using System.Windows.Media;
5
7{
16 public static class DataGridBehaviors
17 {
26 public static readonly DependencyProperty EnableClickToDeselectProperty =
27 DependencyProperty.RegisterAttached(
28 "EnableClickToDeselect",
29 typeof(bool),
30 typeof(DataGridBehaviors),
31 new PropertyMetadata(false, OnEnableClickToDeselectChanged));
32
65 public static bool GetEnableClickToDeselect(DependencyObject obj)
66 => (bool)obj.GetValue(EnableClickToDeselectProperty);
67
100 public static void SetEnableClickToDeselect(DependencyObject obj, bool value)
101 => obj.SetValue(EnableClickToDeselectProperty, value);
102
127 private static void OnEnableClickToDeselectChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
128 {
129 if (d is not DataGrid dg) return;
130
131 if ((bool)e.NewValue)
132 {
133 dg.PreviewMouseLeftButtonDown -= OnPreviewMouseLeftButtonDown;
134 dg.PreviewMouseLeftButtonDown += OnPreviewMouseLeftButtonDown;
135 }
136 else
137 {
138 dg.PreviewMouseLeftButtonDown -= OnPreviewMouseLeftButtonDown;
139 }
140 }
141
166 private static void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
167 {
168 if (sender is not DataGrid dg) return;
169
170 // HitTest로 DataGridRow 찾기
171 var dep = e.OriginalSource as DependencyObject;
172 while (dep != null && dep is not DataGridRow)
173 dep = VisualTreeHelper.GetParent(dep);
174
175 if (dep is not DataGridRow row)
176 return;
177
178 // 이미 선택된 행을 다시 클릭한 경우 → 선택 해제
179 if (row.IsSelected)
180 {
181 // 포커스가 셀/행에 있을 때만 동작하도록 처리(원치 않는 해제 방지)
182 row.IsSelected = false;
183 e.Handled = true; // 기본 선택 동작 막기 → RowDetails 닫힘
184 }
185 // 아니면 기본 동작(선택) 수행 → RowDetails 열림(VisibleWhenSelected)
186 }
187 }
188}
static bool GetEnableClickToDeselect(DependencyObject obj)
static void OnEnableClickToDeselectChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
static readonly DependencyProperty EnableClickToDeselectProperty
static void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
static void SetEnableClickToDeselect(DependencyObject obj, bool value)