diff --git a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
index 4317d795f1..d3e7751c4e 100644
--- a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
+++ b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
@@ -354,19 +354,15 @@ namespace Avalonia.Controls.Primitives
///
/// The control that raised the event.
/// The container or null if the event did not originate in a container.
- protected IControl? GetContainerFromEventSource(IInteractive eventSource)
+ protected IControl? GetContainerFromEventSource(IInteractive? eventSource)
{
- var parent = (IVisual)eventSource;
-
- while (parent != null)
+ for (var current = eventSource as IVisual; current != null; current = current.VisualParent)
{
- if (parent is IControl control && control.LogicalParent == this
- && ItemContainerGenerator?.IndexFromContainer(control) != -1)
+ if (current is IControl control && control.LogicalParent == this &&
+ ItemContainerGenerator?.IndexFromContainer(control) != -1)
{
return control;
}
-
- parent = parent.VisualParent;
}
return null;
@@ -670,7 +666,7 @@ namespace Avalonia.Controls.Primitives
/// false.
///
protected bool UpdateSelectionFromEventSource(
- IInteractive eventSource,
+ IInteractive? eventSource,
bool select = true,
bool rangeModifier = false,
bool toggleModifier = false,