diff --git a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
index c954f9fd4a..e34b3b145f 100644
--- a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
+++ b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
@@ -491,8 +491,7 @@ namespace Avalonia.Controls.Primitives
if (ItemCount > 0 &&
Match(keymap.SelectAll) &&
- (((SelectionMode & SelectionMode.Multiple) != 0) ||
- (SelectionMode & SelectionMode.Toggle) != 0))
+ SelectionMode.HasFlag(SelectionMode.Multiple))
{
Selection.SelectAll();
e.Handled = true;
diff --git a/src/Avalonia.Controls/Selection/InternalSelectionModel.cs b/src/Avalonia.Controls/Selection/InternalSelectionModel.cs
index a28e4b2785..fcdaf44166 100644
--- a/src/Avalonia.Controls/Selection/InternalSelectionModel.cs
+++ b/src/Avalonia.Controls/Selection/InternalSelectionModel.cs
@@ -63,6 +63,11 @@ namespace Avalonia.Controls.Selection
private protected override void SetSource(IEnumerable? value)
{
+ if (Source == value)
+ {
+ return;
+ }
+
object?[]? oldSelection = null;
if (Source is object && value is object)
diff --git a/src/Avalonia.Input/KeyboardNavigation.cs b/src/Avalonia.Input/KeyboardNavigation.cs
index 722215f8b7..6ef3c4fd60 100644
--- a/src/Avalonia.Input/KeyboardNavigation.cs
+++ b/src/Avalonia.Input/KeyboardNavigation.cs
@@ -25,12 +25,11 @@ namespace Avalonia.Input
/// attached property set to , this property
/// defines to which child the focus should move.
///
- public static readonly AttachedProperty TabOnceActiveElementProperty =
- AvaloniaProperty.RegisterAttached(
+ public static readonly AttachedProperty TabOnceActiveElementProperty =
+ AvaloniaProperty.RegisterAttached(
"TabOnceActiveElement",
typeof(KeyboardNavigation));
-
///
/// Defines the IsTabStop attached property.
///
@@ -68,7 +67,7 @@ namespace Avalonia.Input
///
/// The container.
/// The active element for the container.
- public static IInputElement GetTabOnceActiveElement(InputElement element)
+ public static IInputElement? GetTabOnceActiveElement(InputElement element)
{
return element.GetValue(TabOnceActiveElementProperty);
}
@@ -78,7 +77,7 @@ namespace Avalonia.Input
///
/// The container.
/// The active element for the container.
- public static void SetTabOnceActiveElement(InputElement element, IInputElement value)
+ public static void SetTabOnceActiveElement(InputElement element, IInputElement? value)
{
element.SetValue(TabOnceActiveElementProperty, value);
}
diff --git a/src/Avalonia.Layout/FlowLayoutAlgorithm.cs b/src/Avalonia.Layout/FlowLayoutAlgorithm.cs
index cd7f725f18..eace54d2e0 100644
--- a/src/Avalonia.Layout/FlowLayoutAlgorithm.cs
+++ b/src/Avalonia.Layout/FlowLayoutAlgorithm.cs
@@ -211,7 +211,7 @@ namespace Avalonia.Layout
anchorPosition = new Point(anchorBounds.X, anchorBounds.Y);
}
}
- else
+ else if (anchorIndex >= 0)
{
// It is possible to end up in a situation during a collection change where GetAnchorForTargetElement returns an index
// which is not in the realized range. Eg. insert one item at index 0 for a grid layout.