diff --git a/src/Avalonia.Controls/ListBox.cs b/src/Avalonia.Controls/ListBox.cs
index 3568183459..3150b6be91 100644
--- a/src/Avalonia.Controls/ListBox.cs
+++ b/src/Avalonia.Controls/ListBox.cs
@@ -128,7 +128,8 @@ namespace Avalonia.Controls
e.Source,
true,
(e.InputModifiers & InputModifiers.Shift) != 0,
- (e.InputModifiers & InputModifiers.Control) != 0);
+ (e.InputModifiers & InputModifiers.Control) != 0,
+ e.MouseButton == MouseButton.Right);
}
}
diff --git a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
index ab07b3ffa9..91a9fa7e40 100644
--- a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
+++ b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
@@ -506,11 +506,13 @@ namespace Avalonia.Controls.Primitives
/// Whether the item should be selected or unselected.
/// Whether the range modifier is enabled (i.e. shift key).
/// Whether the toggle modifier is enabled (i.e. ctrl key).
+ /// Whether the event is a right-click.
protected void UpdateSelection(
int index,
bool select = true,
bool rangeModifier = false,
- bool toggleModifier = false)
+ bool toggleModifier = false,
+ bool rightButton = false)
{
if (index != -1)
{
@@ -580,7 +582,7 @@ namespace Avalonia.Controls.Primitives
}
else
{
- SelectedIndex = index;
+ UpdateSelectedItem(index, !(rightButton && _selection.Contains(index)));
}
if (Presenter?.Panel != null)
@@ -605,17 +607,19 @@ namespace Avalonia.Controls.Primitives
/// Whether the container should be selected or unselected.
/// Whether the range modifier is enabled (i.e. shift key).
/// Whether the toggle modifier is enabled (i.e. ctrl key).
+ /// Whether the event is a right-click.
protected void UpdateSelection(
IControl container,
bool select = true,
bool rangeModifier = false,
- bool toggleModifier = false)
+ bool toggleModifier = false,
+ bool rightButton = false)
{
var index = ItemContainerGenerator?.IndexFromContainer(container) ?? -1;
if (index != -1)
{
- UpdateSelection(index, select, rangeModifier, toggleModifier);
+ UpdateSelection(index, select, rangeModifier, toggleModifier, rightButton);
}
}
@@ -627,6 +631,7 @@ namespace Avalonia.Controls.Primitives
/// Whether the container should be selected or unselected.
/// Whether the range modifier is enabled (i.e. shift key).
/// Whether the toggle modifier is enabled (i.e. ctrl key).
+ /// Whether the event is a right-click.
///
/// True if the event originated from a container that belongs to the control; otherwise
/// false.
@@ -635,13 +640,14 @@ namespace Avalonia.Controls.Primitives
IInteractive eventSource,
bool select = true,
bool rangeModifier = false,
- bool toggleModifier = false)
+ bool toggleModifier = false,
+ bool rightButton = false)
{
var container = GetContainerFromEventSource(eventSource);
if (container != null)
{
- UpdateSelection(container, select, rangeModifier, toggleModifier);
+ UpdateSelection(container, select, rangeModifier, toggleModifier, rightButton);
return true;
}