diff --git a/Tests/Perspex.Controls.UnitTests/Presenters/DeckPresenterTests.cs b/Tests/Perspex.Controls.UnitTests/Presenters/DeckPresenterTests.cs index f9b909a3cb..ea5faa1e62 100644 --- a/Tests/Perspex.Controls.UnitTests/Presenters/DeckPresenterTests.cs +++ b/Tests/Perspex.Controls.UnitTests/Presenters/DeckPresenterTests.cs @@ -18,7 +18,7 @@ namespace Perspex.Controls.UnitTests.Presenters { var target = new DeckPresenter { - ItemsPanel = new FuncTemplate(() => new Panel()), + ItemsPanel = new FuncTemplate(() => new Panel()), }; target.ApplyTemplate(); diff --git a/Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs b/Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs index ac6a7421e3..37d4df078c 100644 --- a/Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs +++ b/Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs @@ -137,7 +137,7 @@ namespace Perspex.Controls.UnitTests.Presenters var panel = new Panel(); var target = new ItemsPresenter { - ItemsPanel = new FuncTemplate(() => panel), + ItemsPanel = new FuncTemplate(() => panel), }; target.ApplyTemplate(); @@ -152,7 +152,7 @@ namespace Perspex.Controls.UnitTests.Presenters target.ApplyTemplate(); - Assert.Equal(KeyboardNavigationMode.Once, KeyboardNavigation.GetTabNavigation(target.Panel)); + Assert.Equal(KeyboardNavigationMode.Once, KeyboardNavigation.GetTabNavigation((InputElement)target.Panel)); } [Fact] @@ -163,7 +163,7 @@ namespace Perspex.Controls.UnitTests.Presenters KeyboardNavigation.SetTabNavigation(target, KeyboardNavigationMode.Cycle); target.ApplyTemplate(); - Assert.Equal(KeyboardNavigationMode.Cycle, KeyboardNavigation.GetTabNavigation(target.Panel)); + Assert.Equal(KeyboardNavigationMode.Cycle, KeyboardNavigation.GetTabNavigation((InputElement)target.Panel)); } [Fact] diff --git a/src/Perspex.Controls/Deck.cs b/src/Perspex.Controls/Deck.cs index 4898bcfa28..0e95594ad8 100644 --- a/src/Perspex.Controls/Deck.cs +++ b/src/Perspex.Controls/Deck.cs @@ -26,8 +26,8 @@ namespace Perspex.Controls /// /// The default value of for . /// - private static readonly ITemplate PanelTemplate = - new FuncTemplate(() => new Panel()); + private static readonly ITemplate PanelTemplate = + new FuncTemplate(() => new Panel()); /// /// Initializes static members of the class. diff --git a/src/Perspex.Controls/IPanel.cs b/src/Perspex.Controls/IPanel.cs new file mode 100644 index 0000000000..5f1b3f0025 --- /dev/null +++ b/src/Perspex.Controls/IPanel.cs @@ -0,0 +1,19 @@ +// ----------------------------------------------------------------------- +// +// Copyright 2015 MIT Licence. See licence.md for more information. +// +// ----------------------------------------------------------------------- + +namespace Perspex.Controls +{ + /// + /// Interface for controls that can contain multiple children. + /// + public interface IPanel : IControl + { + /// + /// Gets or sets the children of the . + /// + Controls Children { get; set; } + } +} \ No newline at end of file diff --git a/src/Perspex.Controls/ItemsControl.cs b/src/Perspex.Controls/ItemsControl.cs index f07b60114f..4bb971bba2 100644 --- a/src/Perspex.Controls/ItemsControl.cs +++ b/src/Perspex.Controls/ItemsControl.cs @@ -29,8 +29,8 @@ namespace Perspex.Controls /// The default value for the property. /// [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Needs to be before or a NullReferenceException is thrown.")] - private static readonly FuncTemplate DefaultPanel = - new FuncTemplate(() => new StackPanel()); + private static readonly FuncTemplate DefaultPanel = + new FuncTemplate(() => new StackPanel()); /// /// Defines the property. @@ -41,8 +41,8 @@ namespace Perspex.Controls /// /// Defines the property. /// - public static readonly PerspexProperty> ItemsPanelProperty = - PerspexProperty.Register>("ItemsPanel", defaultValue: DefaultPanel); + public static readonly PerspexProperty> ItemsPanelProperty = + PerspexProperty.Register>("ItemsPanel", defaultValue: DefaultPanel); private IItemContainerGenerator itemContainerGenerator; @@ -91,7 +91,7 @@ namespace Perspex.Controls /// /// Gets or sets the panel used to display the items. /// - public ITemplate ItemsPanel + public ITemplate ItemsPanel { get { return this.GetValue(ItemsPanelProperty); } set { this.SetValue(ItemsPanelProperty, value); } diff --git a/src/Perspex.Controls/Menu.cs b/src/Perspex.Controls/Menu.cs index e452e25d0e..199c3b3fd2 100644 --- a/src/Perspex.Controls/Menu.cs +++ b/src/Perspex.Controls/Menu.cs @@ -24,8 +24,8 @@ namespace Perspex.Controls /// /// Defines the default items panel used by a . /// - private static readonly ITemplate DefaultPanel = - new FuncTemplate(() => new StackPanel { Orientation = Orientation.Horizontal }); + private static readonly ITemplate DefaultPanel = + new FuncTemplate(() => new StackPanel { Orientation = Orientation.Horizontal }); /// /// Defines the property. diff --git a/src/Perspex.Controls/MenuItem.cs b/src/Perspex.Controls/MenuItem.cs index 644fa22a42..ff5050759e 100644 --- a/src/Perspex.Controls/MenuItem.cs +++ b/src/Perspex.Controls/MenuItem.cs @@ -77,8 +77,8 @@ namespace Perspex.Controls /// /// The default value for the property. /// - private static readonly ITemplate DefaultPanel = - new FuncTemplate(() => new StackPanel + private static readonly ITemplate DefaultPanel = + new FuncTemplate(() => new StackPanel { [KeyboardNavigation.DirectionalNavigationProperty] = KeyboardNavigationMode.Cycle, }); diff --git a/src/Perspex.Controls/Panel.cs b/src/Perspex.Controls/Panel.cs index 170c8fa3e6..6dbe8cf91b 100644 --- a/src/Perspex.Controls/Panel.cs +++ b/src/Perspex.Controls/Panel.cs @@ -19,7 +19,7 @@ namespace Perspex.Controls /// Controls can be added to a by adding them to its /// collection. All children are layed out to fill the panel. /// - public class Panel : Control, IReparentingControl + public class Panel : Control, IReparentingControl, IPanel { private Controls children = new Controls(); diff --git a/src/Perspex.Controls/Perspex.Controls.csproj b/src/Perspex.Controls/Perspex.Controls.csproj index 5c3e2888b9..d860bef225 100644 --- a/src/Perspex.Controls/Perspex.Controls.csproj +++ b/src/Perspex.Controls/Perspex.Controls.csproj @@ -44,6 +44,7 @@ + diff --git a/src/Perspex.Controls/Presenters/DeckPresenter.cs b/src/Perspex.Controls/Presenters/DeckPresenter.cs index 674d7d020e..352d51b51b 100644 --- a/src/Perspex.Controls/Presenters/DeckPresenter.cs +++ b/src/Perspex.Controls/Presenters/DeckPresenter.cs @@ -31,7 +31,7 @@ namespace Perspex.Controls.Presenters /// /// Defines the property. /// - public static readonly PerspexProperty> ItemsPanelProperty = + public static readonly PerspexProperty> ItemsPanelProperty = ItemsControl.ItemsPanelProperty.AddOwner(); /// @@ -98,7 +98,7 @@ namespace Perspex.Controls.Presenters /// /// Gets or sets the panel used to display the pages. /// - public ITemplate ItemsPanel + public ITemplate ItemsPanel { get { return this.GetValue(ItemsPanelProperty); } set { this.SetValue(ItemsPanelProperty, value); } @@ -116,7 +116,7 @@ namespace Perspex.Controls.Presenters /// /// Gets the panel used to display the pages. /// - public Panel Panel + public IPanel Panel { get; private set; diff --git a/src/Perspex.Controls/Presenters/IItemsPresenter.cs b/src/Perspex.Controls/Presenters/IItemsPresenter.cs index d463d45912..55920a0455 100644 --- a/src/Perspex.Controls/Presenters/IItemsPresenter.cs +++ b/src/Perspex.Controls/Presenters/IItemsPresenter.cs @@ -8,6 +8,6 @@ namespace Perspex.Controls.Presenters { public interface IItemsPresenter : IPresenter { - Panel Panel { get; } + IPanel Panel { get; } } } diff --git a/src/Perspex.Controls/Presenters/ItemsPresenter.cs b/src/Perspex.Controls/Presenters/ItemsPresenter.cs index 12c8ec4133..86c066dc2e 100644 --- a/src/Perspex.Controls/Presenters/ItemsPresenter.cs +++ b/src/Perspex.Controls/Presenters/ItemsPresenter.cs @@ -28,7 +28,7 @@ namespace Perspex.Controls.Presenters /// /// Defines the property. /// - public static readonly PerspexProperty> ItemsPanelProperty = + public static readonly PerspexProperty> ItemsPanelProperty = ItemsControl.ItemsPanelProperty.AddOwner(); private bool createdPanel; @@ -93,7 +93,7 @@ namespace Perspex.Controls.Presenters /// /// Gets or sets a template which creates the used to display the items. /// - public ITemplate ItemsPanel + public ITemplate ItemsPanel { get { return this.GetValue(ItemsPanelProperty); } set { this.SetValue(ItemsPanelProperty, value); } @@ -102,7 +102,7 @@ namespace Perspex.Controls.Presenters /// /// Gets the panel used to display the items. /// - public Panel Panel + public IPanel Panel { get; private set; @@ -143,7 +143,9 @@ namespace Perspex.Controls.Presenters if (!this.Panel.IsSet(KeyboardNavigation.DirectionalNavigationProperty)) { - KeyboardNavigation.SetDirectionalNavigation(this.Panel, KeyboardNavigationMode.Contained); + KeyboardNavigation.SetDirectionalNavigation( + (InputElement)this.Panel, + KeyboardNavigationMode.Contained); } this.AddVisualChild(this.Panel); @@ -157,7 +159,9 @@ namespace Perspex.Controls.Presenters logicalHost.LogicalChildren); } - KeyboardNavigation.SetTabNavigation(this.Panel, KeyboardNavigation.GetTabNavigation(this)); + KeyboardNavigation.SetTabNavigation( + (InputElement)this.Panel, + KeyboardNavigation.GetTabNavigation(this)); this.createdPanel = true; this.CreateItemsAndListenForChanges(this.Items); } diff --git a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs index 235ddf483f..7846c14e1c 100644 --- a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs @@ -325,7 +325,9 @@ namespace Perspex.Controls.Primitives var inputElement = container as IInputElement; if (inputElement != null && this.Presenter != null && this.Presenter.Panel != null) { - KeyboardNavigation.SetTabOnceActiveElement(this.Presenter.Panel, inputElement); + KeyboardNavigation.SetTabOnceActiveElement( + (InputElement)this.Presenter.Panel, + inputElement); } } } diff --git a/src/Perspex.Controls/TreeView.cs b/src/Perspex.Controls/TreeView.cs index 8b070b20f8..f6f1f226a0 100644 --- a/src/Perspex.Controls/TreeView.cs +++ b/src/Perspex.Controls/TreeView.cs @@ -69,7 +69,9 @@ namespace Perspex.Controls if (this.Presenter != null && this.Presenter.Panel != null) { - KeyboardNavigation.SetTabOnceActiveElement(this.Presenter.Panel, selectedContainer); + KeyboardNavigation.SetTabOnceActiveElement( + (InputElement)this.Presenter.Panel, + selectedContainer); } foreach (var item in containers) diff --git a/src/Perspex.Controls/TreeViewItem.cs b/src/Perspex.Controls/TreeViewItem.cs index 65b2c7f16b..379005ed27 100644 --- a/src/Perspex.Controls/TreeViewItem.cs +++ b/src/Perspex.Controls/TreeViewItem.cs @@ -33,8 +33,8 @@ namespace Perspex.Controls public static readonly PerspexProperty IsSelectedProperty = ListBoxItem.IsSelectedProperty.AddOwner(); - private static readonly ITemplate DefaultPanel = - new FuncTemplate(() => new StackPanel + private static readonly ITemplate DefaultPanel = + new FuncTemplate(() => new StackPanel { [KeyboardNavigation.DirectionalNavigationProperty] = KeyboardNavigationMode.Continue, });