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.