diff --git a/Perspex.Controls/Presenters/ItemsPresenter.cs b/Perspex.Controls/Presenters/ItemsPresenter.cs index 1d349c419f..109cc27679 100644 --- a/Perspex.Controls/Presenters/ItemsPresenter.cs +++ b/Perspex.Controls/Presenters/ItemsPresenter.cs @@ -24,6 +24,13 @@ namespace Perspex.Controls.Presenters private bool createdPanel; + static ItemsPresenter() + { + KeyboardNavigation.TabNavigationProperty.OverrideDefaultValue( + typeof(ItemsPresenter), + KeyboardNavigationMode.Once); + } + public ItemsPresenter() { this.GetObservableWithHistory(ItemsProperty).Subscribe(this.ItemsChanged); @@ -78,7 +85,7 @@ namespace Perspex.Controls.Presenters this.ClearVisualChildren(); this.Panel = this.ItemsPanel.Build(); this.Panel.TemplatedParent = this; - KeyboardNavigation.SetTabNavigation(this.Panel, KeyboardNavigationMode.Once); + KeyboardNavigation.SetTabNavigation(this.Panel, KeyboardNavigation.GetTabNavigation(this)); ((IItemsPanel)this.Panel).ChildLogicalParent = this.TemplatedParent as ILogical; this.AddVisualChild(this.Panel); this.createdPanel = true; diff --git a/Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs b/Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs index 416a4590ad..dee92964ee 100644 --- a/Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs +++ b/Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs @@ -48,6 +48,17 @@ namespace Perspex.Controls.UnitTests.Presenters Assert.Equal(KeyboardNavigationMode.Once, KeyboardNavigation.GetTabNavigation(target.Panel)); } + [Fact] + public void Panel_TabNavigation_Should_Be_Set_To_ItemsPresenter_Value() + { + var target = new ItemsPresenter(); + + KeyboardNavigation.SetTabNavigation(target, KeyboardNavigationMode.Cycle); + target.ApplyTemplate(); + + Assert.Equal(KeyboardNavigationMode.Cycle, KeyboardNavigation.GetTabNavigation(target.Panel)); + } + [Fact] public void Panel_Should_Be_Visual_Child() {