Browse Source

Fixed problem in toggle mode with single selection.

pull/278/head
Steven Kirk 11 years ago
parent
commit
49e2e3ec86
  1. 17
      src/Perspex.Controls/Primitives/SelectingItemsControl.cs
  2. 46
      tests/Perspex.Controls.UnitTests/ListBoxTests_Single.cs

17
src/Perspex.Controls/Primitives/SelectingItemsControl.cs

@ -265,7 +265,7 @@ namespace Perspex.Controls.Primitives
}
/// <summary>
/// Updates the selection for an item.
/// Updates the selection for an item based on user interaction.
/// </summary>
/// <param name="index">The index of the item.</param>
/// <param name="select">Whether the item should be selected or unselected.</param>
@ -275,7 +275,9 @@ namespace Perspex.Controls.Primitives
{
if (select)
{
var toggle = (SelectionMode & SelectionMode.Toggle) != 0;
var mode = SelectionMode;
var toggle = (mode & SelectionMode.Toggle) != 0;
var multi = (mode & SelectionMode.Multiple) != 0;
if (!toggle)
{
@ -291,7 +293,14 @@ namespace Perspex.Controls.Primitives
}
else
{
SelectedIndexes.Add(index);
if (multi)
{
SelectedIndexes.Add(index);
}
else
{
SelectedIndex = index;
}
}
}
}
@ -303,7 +312,7 @@ namespace Perspex.Controls.Primitives
}
/// <summary>
/// Updates the selection for a container.
/// Updates the selection for a container based on user interaction.
/// </summary>
/// <param name="container">The container.</param>
/// <param name="select">Whether the container should be selected or unselected.</param>

46
tests/Perspex.Controls.UnitTests/ListBoxTests_Single.cs

@ -122,7 +122,7 @@ namespace Perspex.Controls.UnitTests
{
Template = new ControlTemplate(CreateListBoxTemplate),
Items = new[] { "Foo", "Bar", "Baz " },
SelectionMode = SelectionMode.Single | SelectionMode.Toggle,
SelectionMode = SelectionMode.Toggle,
};
target.ApplyTemplate();
@ -137,6 +137,50 @@ namespace Perspex.Controls.UnitTests
Assert.Equal(-1, target.SelectedIndex);
}
[Fact]
public void Clicking_Selected_Item_Should_Not_Deselect_It_When_SelectionMode_ToggleAlwaysSelected()
{
var target = new ListBox
{
Template = new ControlTemplate(CreateListBoxTemplate),
Items = new[] { "Foo", "Bar", "Baz " },
SelectionMode = SelectionMode.Toggle | SelectionMode.AlwaysSelected,
};
target.ApplyTemplate();
target.SelectedIndex = 0;
target.Presenter.Panel.Children[0].RaiseEvent(new PointerPressEventArgs
{
RoutedEvent = InputElement.PointerPressedEvent,
MouseButton = MouseButton.Left,
});
Assert.Equal(0, target.SelectedIndex);
}
[Fact]
public void Clicking_Another_Item_Should_Select_It_When_SelectionMode_Toggle()
{
var target = new ListBox
{
Template = new ControlTemplate(CreateListBoxTemplate),
Items = new[] { "Foo", "Bar", "Baz " },
SelectionMode = SelectionMode.Single | SelectionMode.Toggle,
};
target.ApplyTemplate();
target.SelectedIndex = 1;
target.Presenter.Panel.Children[0].RaiseEvent(new PointerPressEventArgs
{
RoutedEvent = InputElement.PointerPressedEvent,
MouseButton = MouseButton.Left,
});
Assert.Equal(0, target.SelectedIndex);
}
[Fact]
public void Setting_Item_IsSelected_Sets_ListBox_Selection()
{

Loading…
Cancel
Save