|
|
@@ -11,6 +11,7 @@ using Avalonia.Data;
|
|
|
using Avalonia.Data.Core;
|
|
|
using Avalonia.Input;
|
|
|
using Avalonia.Input.Platform;
|
|
|
+using Avalonia.Interactivity;
|
|
|
using Avalonia.LogicalTree;
|
|
|
using Avalonia.UnitTests;
|
|
|
using Xunit;
|
|
|
@@ -740,6 +741,71 @@ namespace Avalonia.Controls.UnitTests
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void Right_Click_On_SelectedItem_Should_Not_Clear_Existing_Selection()
|
|
|
+ {
|
|
|
+ var tree = CreateTestTreeData();
|
|
|
+ var target = new TreeView
|
|
|
+ {
|
|
|
+ Template = CreateTreeViewTemplate(),
|
|
|
+ Items = tree,
|
|
|
+ ItemTemplate = new FuncDataTemplate<string>(x => new TextBlock { Width = 20, Height = 10 }),
|
|
|
+ SelectionMode = SelectionMode.Multiple,
|
|
|
+ };
|
|
|
+
|
|
|
+ var visualRoot = new TestRoot();
|
|
|
+ visualRoot.Child = target;
|
|
|
+
|
|
|
+ CreateNodeDataTemplate(target);
|
|
|
+ ApplyTemplates(target);
|
|
|
+ target.ExpandSubTree((TreeViewItem)target.Presenter.Panel.Children[0]);
|
|
|
+ target.SelectAll();
|
|
|
+
|
|
|
+ AssertChildrenSelected(target, tree[0]);
|
|
|
+ Assert.Equal(5, target.SelectedItems.Count);
|
|
|
+
|
|
|
+ _mouse.Click((Interactive)target.Presenter.Panel.Children[0], MouseButton.Right);
|
|
|
+
|
|
|
+ Assert.Equal(5, target.SelectedItems.Count);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Right_Click_On_UnselectedItem_Should_Clear_Existing_Selection()
|
|
|
+ {
|
|
|
+ var tree = CreateTestTreeData();
|
|
|
+ var target = new TreeView
|
|
|
+ {
|
|
|
+ Template = CreateTreeViewTemplate(),
|
|
|
+ Items = tree,
|
|
|
+ ItemTemplate = new FuncDataTemplate<string>(x => new TextBlock { Width = 20, Height = 10 }),
|
|
|
+ SelectionMode = SelectionMode.Multiple,
|
|
|
+ };
|
|
|
+
|
|
|
+ var visualRoot = new TestRoot();
|
|
|
+ visualRoot.Child = target;
|
|
|
+
|
|
|
+ CreateNodeDataTemplate(target);
|
|
|
+ ApplyTemplates(target);
|
|
|
+ target.ExpandSubTree((TreeViewItem)target.Presenter.Panel.Children[0]);
|
|
|
+
|
|
|
+ var rootNode = tree[0];
|
|
|
+ var to = rootNode.Children[0];
|
|
|
+ var then = rootNode.Children[1];
|
|
|
+
|
|
|
+ var fromContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(rootNode);
|
|
|
+ var toContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(to);
|
|
|
+ var thenContainer = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(then);
|
|
|
+
|
|
|
+ ClickContainer(fromContainer, InputModifiers.None);
|
|
|
+ ClickContainer(toContainer, InputModifiers.Shift);
|
|
|
+
|
|
|
+ Assert.Equal(2, target.SelectedItems.Count);
|
|
|
+
|
|
|
+ _mouse.Click(thenContainer, MouseButton.Right);
|
|
|
+
|
|
|
+ Assert.Equal(1, target.SelectedItems.Count);
|
|
|
+ }
|
|
|
+
|
|
|
private void ApplyTemplates(TreeView tree)
|
|
|
{
|
|
|
tree.ApplyTemplate();
|
|
|
@@ -874,7 +940,6 @@ namespace Avalonia.Controls.UnitTests
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
private class Node : NotifyingBase
|
|
|
{
|
|
|
private IAvaloniaList<Node> _children;
|