feat: ensure dual mode event handling. ensure async command is closed.

This commit is contained in:
rabbitism
2025-04-23 07:49:34 +08:00
parent aed5682f06
commit 5bfa472c1e
2 changed files with 15 additions and 3 deletions

View File

@@ -36,7 +36,7 @@
<TextBlock Text="GotFocus to open, LostFocus to close" Margin="0 16" />
<u:PopConfirm PopupHeader="确定是否要保存此修改?"
PopupContent="此修改将不可逆"
TriggerMode="Focus"
TriggerMode="Focus, Click"
HorizontalAlignment="Left"
Placement="{Binding #placement.Value}"
u:ControlClassesInput.Source="{Binding #classInput}"

View File

@@ -1,4 +1,5 @@
using System.ComponentModel;
using System.Diagnostics;
using System.Windows.Input;
using Avalonia;
using Avalonia.Controls;
@@ -190,7 +191,7 @@ public class PopConfirm : ContentControl
void OnCanExecuteChanged(object? _, System.EventArgs a)
{
count++;
if (count < 1) return;
if (count < 2) return;
var canExecute = command.CanExecute(button.CommandParameter);
if (canExecute)
{
@@ -246,8 +247,14 @@ public class PopConfirm : ContentControl
SetCurrentValue(IsDropdownOpenProperty, false);
}
private bool _suppressButtonClickEvent;
private void OnMainElementGotFocus(object sender, GotFocusEventArgs e)
{
Debug.WriteLine("Got Focus");
if (TriggerMode.HasFlag(PopConfirmTriggerMode.Click) && TriggerMode.HasFlag(PopConfirmTriggerMode.Focus))
{
_suppressButtonClickEvent = true;
}
SetCurrentValue(IsDropdownOpenProperty, true);
}
@@ -262,7 +269,12 @@ public class PopConfirm : ContentControl
private void OnMainButtonClicked(object sender, RoutedEventArgs e)
{
SetCurrentValue(IsDropdownOpenProperty, !IsDropdownOpen);
Debug.WriteLine("Main Button Clicked");
if (!_suppressButtonClickEvent)
{
SetCurrentValue(IsDropdownOpenProperty, !IsDropdownOpen);
}
_suppressButtonClickEvent = false;
}