Browse Source

Fix multiselection

pull/3186/head
Benedikt Schroeder 7 years ago
parent
commit
5df55e5c9f
  1. 10
      src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
  2. 33
      src/Avalonia.Controls/TabControl.cs
  3. 1
      tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs
  4. 4
      tests/Avalonia.Controls.UnitTests/TabControlTests.cs

10
src/Avalonia.Controls/Primitives/SelectingItemsControl.cs

@ -358,17 +358,17 @@ namespace Avalonia.Controls.Primitives
{
if ((container.ContainerControl as ISelectable)?.IsSelected == true)
{
if (SelectionMode.HasFlag(SelectionMode.Single))
{
SelectedIndex = container.Index;
}
else
if (SelectionMode.HasFlag(SelectionMode.Multiple))
{
if (_selection.Add(container.Index))
{
resetSelectedItems = true;
}
}
else
{
SelectedIndex = container.Index;
}
MarkContainerSelected(container.ContainerControl, true);
}

33
src/Avalonia.Controls/TabControl.cs

@ -146,6 +146,25 @@ namespace Avalonia.Controls
return RegisterContentPresenter(presenter);
}
protected override void OnContainersMaterialized(ItemContainerEventArgs e)
{
base.OnContainersMaterialized(e);
if (SelectedContent != null || SelectedIndex == -1)
{
return;
}
var container = (TabItem)ItemContainerGenerator.ContainerFromIndex(SelectedIndex);
if (container == null)
{
return;
}
UpdateSelectedContent(container);
}
private void UpdateSelectedContent(AvaloniaPropertyChangedEventArgs e)
{
var index = (int)e.NewValue;
@ -190,20 +209,6 @@ namespace Avalonia.Controls
}
}
protected override Size MeasureOverride(Size availableSize)
{
var size = base.MeasureOverride(availableSize);
if (SelectedIndex != -1 && SelectedContent == null)
{
var container = (TabItem)ItemContainerGenerator.ContainerFromIndex(SelectedIndex);
UpdateSelectedContent(container);
}
return size;
}
/// <summary>
/// Called when an <see cref="IContentPresenter"/> is registered with the control.
/// </summary>

1
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs

@ -1080,6 +1080,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
var target = new TestSelector
{
Items = items,
SelectionMode = SelectionMode.Multiple,
Template = Template(),
};

4
tests/Avalonia.Controls.UnitTests/TabControlTests.cs

@ -63,9 +63,7 @@ namespace Avalonia.Controls.UnitTests
target.Items = items;
target.ApplyTemplate();
target.Measure(Size.Infinity);
ApplyTemplate(target);
Assert.Equal(secondContent, target.SelectedContent);
}

Loading…
Cancel
Save