1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using System.Reactive.Disposables;
- using Avalonia.Input;
- using Avalonia.Interactivity;
- namespace Avalonia.Xaml.Interactions.Custom;
- /// <summary>
- ///
- /// </summary>
- public class ExecuteCommandOnLostFocusBehavior : ExecuteCommandRoutedEventBehaviorBase
- {
- static ExecuteCommandOnLostFocusBehavior()
- {
- EventRoutingStrategyProperty.OverrideMetadata<ExecuteCommandOnLostFocusBehavior>(
- new StyledPropertyMetadata<RoutingStrategies>(
- defaultValue: RoutingStrategies.Tunnel | RoutingStrategies.Bubble));
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="disposable"></param>
- protected override void OnAttachedToVisualTree(CompositeDisposable disposable)
- {
- var control = SourceControl ?? AssociatedObject;
- var dispose = control?
- .AddDisposableHandler(
- InputElement.LostFocusEvent,
- OnLostFocus,
- EventRoutingStrategy);
- if (dispose is not null)
- {
- disposable.Add(dispose);
- }
- }
- private void OnLostFocus(object? sender, RoutedEventArgs e)
- {
- if (e.Handled)
- {
- return;
- }
- if (ExecuteCommand())
- {
- e.Handled = MarkAsHandled;
- }
- }
- }
|