diff --git a/api/Avalonia.nupkg.xml b/api/Avalonia.nupkg.xml
index 146d6df001..b4c8bba386 100644
--- a/api/Avalonia.nupkg.xml
+++ b/api/Avalonia.nupkg.xml
@@ -109,6 +109,12 @@
baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+ CP0001
+ T:Avalonia.Input.GotFocusEventArgs
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
CP0001
T:Avalonia.Input.IDataObject
@@ -571,6 +577,12 @@
baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+ CP0001
+ T:Avalonia.Input.GotFocusEventArgs
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
CP0001
T:Avalonia.Input.IDataObject
@@ -961,6 +973,18 @@
baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+ CP0002
+ F:Avalonia.Input.InputElement.GotFocusEvent
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+
+ CP0002
+ F:Avalonia.Input.InputElement.LostFocusEvent
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
CP0002
F:Avalonia.Media.DrawingImage.ViewboxProperty
@@ -1177,6 +1201,18 @@
baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+ CP0002
+ M:Avalonia.Input.InputElement.OnGotFocus(Avalonia.Input.GotFocusEventArgs)
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+
+ CP0002
+ M:Avalonia.Input.InputElement.OnLostFocus(Avalonia.Interactivity.RoutedEventArgs)
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
CP0002
M:Avalonia.Input.InputElement.RemovePinchEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEndedEventArgs})
@@ -1861,6 +1897,12 @@
baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll
current/Avalonia/lib/net10.0/Avalonia.Controls.dll
+
+ CP0002
+ M:Avalonia.Controls.Platform.DefaultMenuInteractionHandler.GotFocus(System.Object,Avalonia.Input.GotFocusEventArgs)
+ baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll
+ current/Avalonia/lib/net10.0/Avalonia.Controls.dll
+
CP0002
M:Avalonia.Controls.Platform.IInsetsManager.get_DisplayEdgeToEdge
@@ -2365,6 +2407,18 @@
baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+ CP0002
+ F:Avalonia.Input.InputElement.GotFocusEvent
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+
+ CP0002
+ F:Avalonia.Input.InputElement.LostFocusEvent
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
CP0002
F:Avalonia.Media.DrawingImage.ViewboxProperty
@@ -2581,6 +2635,18 @@
baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+ CP0002
+ M:Avalonia.Input.InputElement.OnGotFocus(Avalonia.Input.GotFocusEventArgs)
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+
+ CP0002
+ M:Avalonia.Input.InputElement.OnLostFocus(Avalonia.Interactivity.RoutedEventArgs)
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
CP0002
M:Avalonia.Input.InputElement.RemovePinchEndedHandler(Avalonia.Interactivity.Interactive,System.EventHandler{Avalonia.Input.PinchEndedEventArgs})
@@ -3265,6 +3331,12 @@
baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll
current/Avalonia/lib/net8.0/Avalonia.Controls.dll
+
+ CP0002
+ M:Avalonia.Controls.Platform.DefaultMenuInteractionHandler.GotFocus(System.Object,Avalonia.Input.GotFocusEventArgs)
+ baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll
+ current/Avalonia/lib/net8.0/Avalonia.Controls.dll
+
CP0002
M:Avalonia.Controls.Platform.IInsetsManager.get_DisplayEdgeToEdge
@@ -3799,6 +3871,18 @@
baseline/Avalonia/lib/net8.0/Avalonia.OpenGL.dll
current/Avalonia/lib/net8.0/Avalonia.OpenGL.dll
+
+ CP0006
+ E:Avalonia.Input.IInputElement.GotFocus
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
+
+ CP0006
+ E:Avalonia.Input.IInputElement.LostFocus
+ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll
+ current/Avalonia/lib/net10.0/Avalonia.Base.dll
+
CP0006
M:Avalonia.Input.IKeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers,System.Nullable{Avalonia.Input.KeyDeviceType})
@@ -4063,6 +4147,18 @@
baseline/Avalonia/lib/net6.0/Avalonia.OpenGL.dll
current/Avalonia/lib/net6.0/Avalonia.OpenGL.dll
+
+ CP0006
+ E:Avalonia.Input.IInputElement.GotFocus
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
+
+ CP0006
+ E:Avalonia.Input.IInputElement.LostFocus
+ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll
+ current/Avalonia/lib/net8.0/Avalonia.Base.dll
+
CP0006
M:Avalonia.Input.IKeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers,System.Nullable{Avalonia.Input.KeyDeviceType})
diff --git a/src/Avalonia.Base/Input/FocusChangedEventArgs.cs b/src/Avalonia.Base/Input/FocusChangedEventArgs.cs
new file mode 100644
index 0000000000..ade599ee08
--- /dev/null
+++ b/src/Avalonia.Base/Input/FocusChangedEventArgs.cs
@@ -0,0 +1,39 @@
+using Avalonia.Interactivity;
+
+namespace Avalonia.Input
+{
+ ///
+ /// Represents the arguments of and .
+ ///
+ public class FocusChangedEventArgs : RoutedEventArgs, IKeyModifiersEventArgs
+ {
+ ///
+ /// Initializes a new instance of .
+ ///
+ /// The routed event associated with these event args.
+ public FocusChangedEventArgs(RoutedEvent routedEvent)
+ : base(routedEvent)
+ {
+ }
+
+ ///
+ /// Gets or sets the element that focus has moved to.
+ ///
+ public IInputElement? NewFocusedElement { get; init; }
+
+ ///
+ /// Gets or sets the element that previously had focus.
+ ///
+ public IInputElement? OldFocusedElement { get; init; }
+
+ ///
+ /// Gets or sets a value indicating how the change in focus occurred.
+ ///
+ public NavigationMethod NavigationMethod { get; init; }
+
+ ///
+ /// Gets or sets any key modifiers active at the time of focus.
+ ///
+ public KeyModifiers KeyModifiers { get; init; }
+ }
+}
diff --git a/src/Avalonia.Base/Input/GotFocusEventArgs.cs b/src/Avalonia.Base/Input/GotFocusEventArgs.cs
deleted file mode 100644
index 658bf5aae5..0000000000
--- a/src/Avalonia.Base/Input/GotFocusEventArgs.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Avalonia.Interactivity;
-
-namespace Avalonia.Input
-{
- ///
- /// Holds arguments for a .
- ///
- public class GotFocusEventArgs : RoutedEventArgs, IKeyModifiersEventArgs
- {
- public GotFocusEventArgs() : base(InputElement.GotFocusEvent)
- {
- }
-
- ///
- /// Gets or sets a value indicating how the change in focus occurred.
- ///
- public NavigationMethod NavigationMethod { get; init; }
-
- ///
- /// Gets or sets any key modifiers active at the time of focus.
- ///
- public KeyModifiers KeyModifiers { get; init; }
- }
-}
diff --git a/src/Avalonia.Base/Input/IInputElement.cs b/src/Avalonia.Base/Input/IInputElement.cs
index 39dc30befd..f69f7ea343 100644
--- a/src/Avalonia.Base/Input/IInputElement.cs
+++ b/src/Avalonia.Base/Input/IInputElement.cs
@@ -14,12 +14,12 @@ namespace Avalonia.Input
///
/// Occurs when the control receives focus.
///
- event EventHandler? GotFocus;
+ event EventHandler? GotFocus;
///
/// Occurs when the control loses focus.
///
- event EventHandler? LostFocus;
+ event EventHandler? LostFocus;
///
/// Occurs when a key is pressed while the control has focus.
diff --git a/src/Avalonia.Base/Input/InputElement.cs b/src/Avalonia.Base/Input/InputElement.cs
index 98b988f8cd..1beccf341e 100644
--- a/src/Avalonia.Base/Input/InputElement.cs
+++ b/src/Avalonia.Base/Input/InputElement.cs
@@ -79,8 +79,8 @@ namespace Avalonia.Input
///
/// Defines the event.
///
- public static readonly RoutedEvent GotFocusEvent =
- RoutedEvent.Register(nameof(GotFocus), RoutingStrategies.Bubble);
+ public static readonly RoutedEvent GotFocusEvent =
+ RoutedEvent.Register(nameof(GotFocus), RoutingStrategies.Bubble);
///
/// Defines the event.
@@ -91,8 +91,8 @@ namespace Avalonia.Input
///
/// Defines the event.
///
- public static readonly RoutedEvent LostFocusEvent =
- RoutedEvent.Register(nameof(LostFocus), RoutingStrategies.Bubble);
+ public static readonly RoutedEvent LostFocusEvent =
+ RoutedEvent.Register(nameof(LostFocus), RoutingStrategies.Bubble);
///
/// Defines the event.
@@ -278,7 +278,7 @@ namespace Avalonia.Input
///
/// Occurs when the control receives focus.
///
- public event EventHandler? GotFocus
+ public event EventHandler? GotFocus
{
add { AddHandler(GotFocusEvent, value); }
remove { RemoveHandler(GotFocusEvent, value); }
@@ -296,7 +296,7 @@ namespace Avalonia.Input
///
/// Occurs when the control loses focus.
///
- public event EventHandler? LostFocus
+ public event EventHandler? LostFocus
{
add { AddHandler(LostFocusEvent, value); }
remove { RemoveHandler(LostFocusEvent, value); }
@@ -593,7 +593,7 @@ namespace Avalonia.Input
UpdateIsEffectivelyEnabled();
}
- private void OnGotFocusCore(GotFocusEventArgs e)
+ private void OnGotFocusCore(FocusChangedEventArgs e)
{
var isFocused = e.Source == this;
_isFocusVisible = isFocused && (e.NavigationMethod == NavigationMethod.Directional || e.NavigationMethod == NavigationMethod.Tab);
@@ -617,11 +617,11 @@ namespace Avalonia.Input
/// for this event.
///
/// Data about the event.
- protected virtual void OnGotFocus(GotFocusEventArgs e)
+ protected virtual void OnGotFocus(FocusChangedEventArgs e)
{
}
- private void OnLostFocusCore(RoutedEventArgs e)
+ private void OnLostFocusCore(FocusChangedEventArgs e)
{
_isFocusVisible = false;
IsFocused = false;
@@ -634,7 +634,7 @@ namespace Avalonia.Input
/// for this event.
///
/// Data about the event.
- protected virtual void OnLostFocus(RoutedEventArgs e)
+ protected virtual void OnLostFocus(FocusChangedEventArgs e)
{
}
diff --git a/src/Avalonia.Base/Input/KeyboardDevice.cs b/src/Avalonia.Base/Input/KeyboardDevice.cs
index 3d9764528a..e2b530a91a 100644
--- a/src/Avalonia.Base/Input/KeyboardDevice.cs
+++ b/src/Avalonia.Base/Input/KeyboardDevice.cs
@@ -188,25 +188,35 @@ namespace Avalonia.Input
if (changeFocus)
{
+ var oldElement = FocusedElement;
+
// Clear keyboard focus from currently focused element
- if (FocusedElement != null &&
- (!((Visual)FocusedElement).IsAttachedToVisualTree ||
+ if (oldElement != null &&
+ (!((Visual)oldElement).IsAttachedToVisualTree ||
_focusedRoot != ((Visual?)element)?.GetInputRoot()) &&
_focusedRoot != null)
{
ClearChildrenFocusWithin(_focusedRoot.RootElement, true);
}
- SetIsFocusWithin(FocusedElement, element);
+ SetIsFocusWithin(oldElement, element);
_focusedElement = element;
_focusedRoot = (_focusedElement as Visual)?.GetInputRoot();
- interactive?.RaiseEvent(new RoutedEventArgs(InputElement.LostFocusEvent));
+ interactive?.RaiseEvent(new FocusChangedEventArgs(InputElement.LostFocusEvent)
+ {
+ OldFocusedElement = oldElement,
+ NewFocusedElement = element,
+ NavigationMethod = method,
+ KeyModifiers = keyModifiers
+ });
- (element as Interactive)?.RaiseEvent(new GotFocusEventArgs
+ (element as Interactive)?.RaiseEvent(new FocusChangedEventArgs(InputElement.GotFocusEvent)
{
+ OldFocusedElement = oldElement,
+ NewFocusedElement = element,
NavigationMethod = method,
- KeyModifiers = keyModifiers,
+ KeyModifiers = keyModifiers
});
_textInputManager.SetFocusedElement(element);
diff --git a/src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs b/src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs
index 7ddd6d15ec..39cd5f0c5b 100644
--- a/src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs
+++ b/src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs
@@ -348,7 +348,7 @@ namespace Avalonia.Controls.Primitives
}
///
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
// We only want to bother with the color name tool tip if we can provide color names.
if (_selectionEllipsePanel != null &&
@@ -363,7 +363,7 @@ namespace Avalonia.Controls.Primitives
}
///
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
// We only want to bother with the color name tool tip if we can provide color names.
if (_selectionEllipsePanel != null &&
diff --git a/src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs b/src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs
index 880fd0ac8a..0520d7643f 100644
--- a/src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs
+++ b/src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs
@@ -740,7 +740,7 @@ namespace Avalonia.Controls
///
/// A
/// that contains the event data.
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
FocusChanged(HasFocus());
@@ -752,7 +752,7 @@ namespace Avalonia.Controls
///
/// A
/// that contains the event data.
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
base.OnLostFocus(e);
FocusChanged(HasFocus());
diff --git a/src/Avalonia.Controls/Button.cs b/src/Avalonia.Controls/Button.cs
index 9e2d1725ce..ceadae432c 100644
--- a/src/Avalonia.Controls/Button.cs
+++ b/src/Avalonia.Controls/Button.cs
@@ -453,7 +453,7 @@ namespace Avalonia.Controls
}
///
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
base.OnLostFocus(e);
diff --git a/src/Avalonia.Controls/Calendar/Calendar.cs b/src/Avalonia.Controls/Calendar/Calendar.cs
index d0a5e2e890..dc8ea002d9 100644
--- a/src/Avalonia.Controls/Calendar/Calendar.cs
+++ b/src/Avalonia.Controls/Calendar/Calendar.cs
@@ -2118,7 +2118,7 @@ namespace Avalonia.Controls
}
}
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
HasFocusInternal = true;
@@ -2157,7 +2157,7 @@ namespace Avalonia.Controls
}
}
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
base.OnLostFocus(e);
HasFocusInternal = false;
diff --git a/src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs b/src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs
index c07d43b77c..6a3f44aa5f 100644
--- a/src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs
+++ b/src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs
@@ -390,7 +390,7 @@ namespace Avalonia.Controls
}
///
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
if(IsEnabled && _textBox != null && e.NavigationMethod == NavigationMethod.Tab)
@@ -406,7 +406,7 @@ namespace Avalonia.Controls
}
///
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
base.OnLostFocus(e);
diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs
index c4af8467c0..c977ca0a38 100644
--- a/src/Avalonia.Controls/ComboBox.cs
+++ b/src/Avalonia.Controls/ComboBox.cs
@@ -453,7 +453,7 @@ namespace Avalonia.Controls
return new ComboBoxAutomationPeer(this);
}
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
if (IsEditable && _inputTextBox != null)
{
diff --git a/src/Avalonia.Controls/Control.cs b/src/Avalonia.Controls/Control.cs
index 8efe5d6d66..edd647f772 100644
--- a/src/Avalonia.Controls/Control.cs
+++ b/src/Avalonia.Controls/Control.cs
@@ -380,7 +380,7 @@ namespace Avalonia.Controls
}
///
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
@@ -414,7 +414,7 @@ namespace Avalonia.Controls
}
///
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
base.OnLostFocus(e);
diff --git a/src/Avalonia.Controls/GridSplitter.cs b/src/Avalonia.Controls/GridSplitter.cs
index df502207c6..e44289649d 100644
--- a/src/Avalonia.Controls/GridSplitter.cs
+++ b/src/Avalonia.Controls/GridSplitter.cs
@@ -449,7 +449,7 @@ namespace Avalonia.Controls
}
}
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
base.OnLostFocus(e);
diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs
index c176f3aeee..a3900874a1 100644
--- a/src/Avalonia.Controls/ItemsControl.cs
+++ b/src/Avalonia.Controls/ItemsControl.cs
@@ -532,7 +532,7 @@ namespace Avalonia.Controls
_itemsPresenter = e.NameScope.Find("PART_ItemsPresenter");
}
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
diff --git a/src/Avalonia.Controls/MaskedTextBox.cs b/src/Avalonia.Controls/MaskedTextBox.cs
index 08855d253c..cfbd072a88 100644
--- a/src/Avalonia.Controls/MaskedTextBox.cs
+++ b/src/Avalonia.Controls/MaskedTextBox.cs
@@ -186,7 +186,7 @@ namespace Avalonia.Controls
protected override Type StyleKeyOverride => typeof(TextBox);
///
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
if (HidePromptOnLeave == true && MaskProvider != null)
{
@@ -283,7 +283,7 @@ namespace Avalonia.Controls
}
///
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
if (HidePromptOnLeave && MaskProvider != null)
{
diff --git a/src/Avalonia.Controls/MenuItem.cs b/src/Avalonia.Controls/MenuItem.cs
index 231dcc6a53..6bd0383463 100644
--- a/src/Avalonia.Controls/MenuItem.cs
+++ b/src/Avalonia.Controls/MenuItem.cs
@@ -506,7 +506,7 @@ namespace Avalonia.Controls
}
///
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
ItemsControlFromItemContainer(this)?.UpdateSelectionFromEvent(this, e);
diff --git a/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs b/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
index ab3861db47..ddaa57f2f2 100644
--- a/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
+++ b/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
@@ -440,14 +440,14 @@ namespace Avalonia.Controls
}
///
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
FocusChanged(IsKeyboardFocusWithin);
}
///
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
CommitInput(true);
base.OnLostFocus(e);
diff --git a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
index f8d8c43d3c..38bae7be8a 100644
--- a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
+++ b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
@@ -52,7 +52,7 @@ namespace Avalonia.Controls.Platform
public static TimeSpan MenuShowDelay { get; set;} = TimeSpan.FromMilliseconds(400);
- protected internal virtual void GotFocus(object? sender, GotFocusEventArgs e)
+ protected internal virtual void GotFocus(object? sender, FocusChangedEventArgs e)
{
var item = GetMenuItemCore(e.Source as Control);
diff --git a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
index d78d6e07c2..1d6a44c0b3 100644
--- a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
+++ b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
@@ -896,12 +896,12 @@ namespace Avalonia.Controls.Primitives
{
case PointerEventArgs pointerEvent when ShouldTriggerSelection(container, pointerEvent):
case KeyEventArgs keyEvent when ShouldTriggerSelection(container, keyEvent):
- case GotFocusEventArgs:
+ case FocusChangedEventArgs:
UpdateSelection(containerIndex, true,
ItemSelectionEventTriggers.HasRangeSelectionModifier(container, eventArgs),
ItemSelectionEventTriggers.HasToggleSelectionModifier(container, eventArgs),
eventArgs is PointerEventArgs { Properties.IsRightButtonPressed: true },
- eventArgs is GotFocusEventArgs);
+ eventArgs is FocusChangedEventArgs);
eventArgs.Handled = true;
return true;
diff --git a/src/Avalonia.Controls/Primitives/TabStrip.cs b/src/Avalonia.Controls/Primitives/TabStrip.cs
index 29cf48ce9e..6a206f0304 100644
--- a/src/Avalonia.Controls/Primitives/TabStrip.cs
+++ b/src/Avalonia.Controls/Primitives/TabStrip.cs
@@ -32,7 +32,7 @@ namespace Avalonia.Controls.Primitives
public override bool UpdateSelectionFromEvent(Control container, RoutedEventArgs eventArgs)
{
- if (eventArgs is GotFocusEventArgs { NavigationMethod: not NavigationMethod.Directional })
+ if (eventArgs is FocusChangedEventArgs { NavigationMethod: not NavigationMethod.Directional })
{
return false;
}
diff --git a/src/Avalonia.Controls/Primitives/TabStripItem.cs b/src/Avalonia.Controls/Primitives/TabStripItem.cs
index 0053255613..1dcd55078d 100644
--- a/src/Avalonia.Controls/Primitives/TabStripItem.cs
+++ b/src/Avalonia.Controls/Primitives/TabStripItem.cs
@@ -7,7 +7,7 @@ namespace Avalonia.Controls.Primitives
///
public class TabStripItem : ListBoxItem
{
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
UpdateSelectionFromEvent(e);
diff --git a/src/Avalonia.Controls/ScrollViewer.cs b/src/Avalonia.Controls/ScrollViewer.cs
index e93180fff4..2593c4b475 100644
--- a/src/Avalonia.Controls/ScrollViewer.cs
+++ b/src/Avalonia.Controls/ScrollViewer.cs
@@ -766,7 +766,7 @@ namespace Avalonia.Controls
}
}
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
diff --git a/src/Avalonia.Controls/SelectableTextBlock.cs b/src/Avalonia.Controls/SelectableTextBlock.cs
index f3532763f6..493c1631d4 100644
--- a/src/Avalonia.Controls/SelectableTextBlock.cs
+++ b/src/Avalonia.Controls/SelectableTextBlock.cs
@@ -160,14 +160,14 @@ namespace Avalonia.Controls
SetCurrentValue(SelectionEndProperty, SelectionStart);
}
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
UpdateCommandStates();
}
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
base.OnLostFocus(e);
diff --git a/src/Avalonia.Controls/TabControl.cs b/src/Avalonia.Controls/TabControl.cs
index 67274247c2..cb619a941d 100644
--- a/src/Avalonia.Controls/TabControl.cs
+++ b/src/Avalonia.Controls/TabControl.cs
@@ -237,7 +237,7 @@ namespace Avalonia.Controls
public override bool UpdateSelectionFromEvent(Control container, RoutedEventArgs eventArgs)
{
- if (eventArgs is GotFocusEventArgs { NavigationMethod: not NavigationMethod.Directional })
+ if (eventArgs is FocusChangedEventArgs { NavigationMethod: not NavigationMethod.Directional })
{
return false;
}
diff --git a/src/Avalonia.Controls/TabItem.cs b/src/Avalonia.Controls/TabItem.cs
index 07f2cd6505..a4829c16ca 100644
--- a/src/Avalonia.Controls/TabItem.cs
+++ b/src/Avalonia.Controls/TabItem.cs
@@ -111,7 +111,7 @@ namespace Avalonia.Controls
e.Handled = true;
}
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
UpdateSelectionFromEvent(e);
diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs
index 447a6a41fc..eadb54b58a 100644
--- a/src/Avalonia.Controls/TextBox.cs
+++ b/src/Avalonia.Controls/TextBox.cs
@@ -1088,7 +1088,7 @@ namespace Avalonia.Controls
CanPaste = !IsReadOnly;
}
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
base.OnGotFocus(e);
@@ -1114,7 +1114,7 @@ namespace Avalonia.Controls
_presenter?.ShowCaret();
}
- protected override void OnLostFocus(RoutedEventArgs e)
+ protected override void OnLostFocus(FocusChangedEventArgs e)
{
base.OnLostFocus(e);
diff --git a/src/Avalonia.Controls/TreeView.cs b/src/Avalonia.Controls/TreeView.cs
index 033be87c7f..d48997f390 100644
--- a/src/Avalonia.Controls/TreeView.cs
+++ b/src/Avalonia.Controls/TreeView.cs
@@ -550,7 +550,7 @@ namespace Avalonia.Controls
}
///
- protected override void OnGotFocus(GotFocusEventArgs e)
+ protected override void OnGotFocus(FocusChangedEventArgs e)
{
if (e.NavigationMethod == NavigationMethod.Directional)
{
diff --git a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs
index f0f9b820f7..1c2d43e94f 100644
--- a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs
+++ b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs
@@ -35,7 +35,7 @@ namespace Avalonia.Controls.UnitTests
Prepare(target);
- target.Presenter!.Panel!.Children[0].RaiseEvent(new GotFocusEventArgs
+ target.Presenter!.Panel!.Children[0].RaiseEvent(new FocusChangedEventArgs(InputElement.GotFocusEvent)
{
NavigationMethod = NavigationMethod.Tab,
});
@@ -57,7 +57,7 @@ namespace Avalonia.Controls.UnitTests
AvaloniaLocator.CurrentMutable.Bind().ToConstant(new PlatformHotkeyConfiguration());
Prepare(target);
- target.Presenter!.Panel!.Children[0].RaiseEvent(new GotFocusEventArgs
+ target.Presenter!.Panel!.Children[0].RaiseEvent(new FocusChangedEventArgs(InputElement.GotFocusEvent)
{
NavigationMethod = NavigationMethod.Directional,
KeyModifiers = KeyModifiers.Control