diff --git a/src/Perspex.Controls/Mixins/SelectableMixin.cs b/src/Perspex.Controls/Mixins/SelectableMixin.cs
index 21b04f9702..4d1e5bb25f 100644
--- a/src/Perspex.Controls/Mixins/SelectableMixin.cs
+++ b/src/Perspex.Controls/Mixins/SelectableMixin.cs
@@ -50,11 +50,14 @@ namespace Perspex.Controls.Mixins
if (sender != null)
{
+ var itemsControl = sender.Parent as SelectingItemsControl;
+
if ((bool)x.NewValue)
{
((IPseudoClasses)sender.Classes).Add(":selected");
- if (((IVisual)sender).IsAttachedToVisualTree)
+ if (((IVisual)sender).IsAttachedToVisualTree &&
+ itemsControl?.AutoScrollToSelectedItem == true)
{
sender.BringIntoView();
}
diff --git a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs
index c271bbd900..9ec708dd6b 100644
--- a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs
+++ b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs
@@ -38,6 +38,14 @@ namespace Perspex.Controls.Primitives
///
public class SelectingItemsControl : ItemsControl
{
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty AutoScrollToSelectedItemProperty =
+ PerspexProperty.Register(
+ nameof(AutoScrollToSelectedItem),
+ defaultValue: true);
+
///
/// Defines the property.
///
@@ -123,6 +131,15 @@ namespace Perspex.Controls.Primitives
remove { RemoveHandler(SelectionChangedEvent, value); }
}
+ ///
+ /// Gets or sets a value indicating whether to automatically scroll to newly selected items.
+ ///
+ public bool AutoScrollToSelectedItem
+ {
+ get { return GetValue(AutoScrollToSelectedItemProperty); }
+ set { SetValue(AutoScrollToSelectedItemProperty, value); }
+ }
+
///
/// Gets or sets the index of the selected item.
///
diff --git a/src/Perspex.Controls/TreeView.cs b/src/Perspex.Controls/TreeView.cs
index 6fe61be20a..8437e0712a 100644
--- a/src/Perspex.Controls/TreeView.cs
+++ b/src/Perspex.Controls/TreeView.cs
@@ -22,9 +22,7 @@ namespace Perspex.Controls
/// Defines the property.
///
public static readonly StyledProperty AutoScrollToSelectedItemProperty =
- PerspexProperty.Register(
- nameof(AutoScrollToSelectedItem),
- defaultValue: true);
+ SelectingItemsControl.AutoScrollToSelectedItemProperty.AddOwner();
///
/// Defines the property.