|
|
@@ -17,7 +17,6 @@ namespace Avalonia.Controls
|
|
|
/// </summary>
|
|
|
public class DataGridCheckBoxColumn : DataGridBoundColumn
|
|
|
{
|
|
|
- private bool _beganEditWithKeyboard;
|
|
|
private CheckBox _currentCheckBox;
|
|
|
private DataGrid _owningGrid;
|
|
|
|
|
|
@@ -153,23 +152,7 @@ namespace Avalonia.Controls
|
|
|
{
|
|
|
if (editingElement is CheckBox editingCheckBox)
|
|
|
{
|
|
|
- bool? uneditedValue = editingCheckBox.IsChecked;
|
|
|
- bool editValue = false;
|
|
|
- if(editingEventArgs is PointerPressedEventArgs args)
|
|
|
- {
|
|
|
- // Editing was triggered by a mouse click
|
|
|
- Point position = args.GetPosition(editingCheckBox);
|
|
|
- Rect rect = new Rect(0, 0, editingCheckBox.Bounds.Width, editingCheckBox.Bounds.Height);
|
|
|
- editValue = rect.Contains(position);
|
|
|
- }
|
|
|
- else if (_beganEditWithKeyboard)
|
|
|
- {
|
|
|
- // Editing began by a user pressing spacebar
|
|
|
- editValue = true;
|
|
|
- _beganEditWithKeyboard = false;
|
|
|
- }
|
|
|
-
|
|
|
- if (editValue)
|
|
|
+ void EditValue()
|
|
|
{
|
|
|
// User clicked the checkbox itself or pressed space, let's toggle the IsChecked value
|
|
|
if (editingCheckBox.IsThreeState)
|
|
|
@@ -192,6 +175,40 @@ namespace Avalonia.Controls
|
|
|
editingCheckBox.IsChecked = !editingCheckBox.IsChecked;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ bool? uneditedValue = editingCheckBox.IsChecked;
|
|
|
+ if(editingEventArgs is PointerPressedEventArgs args)
|
|
|
+ {
|
|
|
+ void ProcessPointerArgs()
|
|
|
+ {
|
|
|
+ // Editing was triggered by a mouse click
|
|
|
+ Point position = args.GetPosition(editingCheckBox);
|
|
|
+ Rect rect = new Rect(0, 0, editingCheckBox.Bounds.Width, editingCheckBox.Bounds.Height);
|
|
|
+ if(rect.Contains(position))
|
|
|
+ {
|
|
|
+ EditValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void OnLayoutUpdated(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ if(!editingCheckBox.Bounds.IsEmpty)
|
|
|
+ {
|
|
|
+ editingCheckBox.LayoutUpdated -= OnLayoutUpdated;
|
|
|
+ ProcessPointerArgs();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(editingCheckBox.Bounds.IsEmpty)
|
|
|
+ {
|
|
|
+ editingCheckBox.LayoutUpdated += OnLayoutUpdated;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ProcessPointerArgs();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return uneditedValue;
|
|
|
}
|
|
|
return false;
|
|
|
@@ -284,13 +301,10 @@ namespace Avalonia.Controls
|
|
|
CheckBox checkBox = GetCellContent(row) as CheckBox;
|
|
|
if (checkBox == _currentCheckBox)
|
|
|
{
|
|
|
- _beganEditWithKeyboard = true;
|
|
|
OwningGrid.BeginEdit();
|
|
|
- return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- _beganEditWithKeyboard = false;
|
|
|
}
|
|
|
|
|
|
private void OwningGrid_LoadingRow(object sender, DataGridRowEventArgs e)
|