At the moment the items in a similar setup can be navigated using the arrow keys
Workaround: public class CustomPageView : RadPageView { public override string ThemeClassName { get { return typeof(RadPageView).FullName; } } protected override RadPageViewElement CreateUI() { if (this.ViewMode == PageViewMode.NavigationView) { return new CustomRadPageViewNavigationViewElement(); } return base.CreateUI(); } } public class CustomRadPageViewNavigationViewElement : RadPageViewNavigationViewElement { protected override Type ThemeEffectiveType { get { return typeof(RadPageViewNavigationViewElement); } } public override void Expand() { if (!this.IsCollapsed) { return; } FieldInfo pi = typeof(RadPageViewNavigationViewElement).GetField("isCollapsed", BindingFlags.NonPublic | BindingFlags.Instance); pi.SetValue(this, false); this.ItemContainer.Visibility = ElementVisibility.Visible; NavigationViewDisplayModes mode = this.GetEffectiveDisplayMode(this.Size.Width); if (mode == NavigationViewDisplayModes.Expanded) { this.ItemContainer.MinSize = new Size(this.ExpandedPaneWidth, 0); } else { this.PopupStack.Children.Insert(0, this.HamburgerButton); if (!this.PopupStack.Children.Contains(this.ItemContainer)) { this.PopupStack.Children.Add(this.ItemContainer); } this.HamburgerButton.Alignment = this.RightToLeft ? ContentAlignment.TopRight : ContentAlignment.TopLeft; this.HamburgerButton.StretchHorizontally = true; this.ItemContainer.ItemLayout.SetValue(RadPageViewStripElement.StripAlignmentProperty, StripViewAlignment.Right); this.ItemContainer.ResetValue(RadElement.MinSizeProperty, ValueResetFlags.Animation); this.ItemContainer.MinSize = new Size(this.ExpandedPaneWidth, 0); this.ItemContainer.MaxSize = Size.Empty; foreach (RadPageViewItem item in this.Items) { item.DrawText = true; } if (this.Popup.ElementTree.RootElement.ElementState != ElementState.Loaded) { Size size = new Size(this.ExpandedPaneWidth, (int)this.DesiredSize.Height); this.Popup.LoadElementTree(size); } ApplyThemeToPopup(this.ElementTree, this.Popup); this.Popup.Size = new Size(this.ExpandedPaneWidth, (int)this.DesiredSize.Height); this.Popup.DropDownAnimationDirection = this.RightToLeft ? RadDirection.Left : RadDirection.Right; this.Popup.HorizontalPopupAlignment = this.RightToLeft ? HorizontalPopupAlignment.RightToRight : HorizontalPopupAlignment.LeftToLeft; this.Popup.VerticalPopupAlignment = VerticalPopupAlignment.TopToBottom; this.Popup.RootElement.BackColor = this.BackColor; this.Popup.Show(this.PointToScreen(this.RightToLeft ? new Point(this.Bounds.Right, this.Bounds.Top) : new Point(this.Bounds.Left, this.Bounds.Top))); } } public override void Collapse() { if (this.IsCollapsed) { return; } FieldInfo pi = typeof(RadPageViewNavigationViewElement).GetField("isCollapsed", BindingFlags.NonPublic | BindingFlags.Instance); pi.SetValue(this, true); foreach (RadPageViewItem item in this.Items) { item.DrawText = false; } NavigationViewDisplayModes mode = this.GetEffectiveDisplayMode(this.Size.Width); if (mode == NavigationViewDisplayModes.Expanded) { this.ItemContainer.MinSize = new Size(this.CollapsedPaneWidth, 0); } else { FieldInfo fi = typeof(RadPageViewNavigationViewElement).GetField("programmaticallyClosingPopup", BindingFlags.NonPublic | BindingFlags.Instance); fi.SetValue(this, true); this.Popup.ClosePopup(RadPopupCloseReason.Mouse); this.HamburgerButton.StretchHorizontally = false; fi = typeof(RadPageViewNavigationViewElement).GetField("programmaticallyClosingPopup", BindingFlags.NonPublic | BindingFlags.Instance); fi.SetValue(this, false); if (mode == NavigationViewDisplayModes.Compact) { this.ItemContainer.MinSize = new Size(this.CollapsedPaneWidth, 0); this.ItemContainer.MaxSize = new Size(this.CollapsedPaneWidth, 0); if (!this.Children.Contains(this.ItemContainer)) { this.Popup.RootElement.ResetValue(RadItem.BackColorProperty, ValueResetFlags.Local); this.Children.Insert(0, this.ItemContainer); } } if (!this.Children.Contains(this.HamburgerButton)) { this.HamburgerButton.ResetValue(AlignmentProperty, ValueResetFlags.Local); this.Children.Add(this.HamburgerButton); } } } }
Currently the pages are wrapped around, i.e. when one reaches the last pages and select next using the down arrow key the first page gets selected Workaround: Public Class MyRadPageView Inherits RadPageView Public Overrides Property ThemeClassName As String Get Return GetType(RadPageView).FullName End Get Set(value As String) MyBase.ThemeClassName = value End Set End Property Protected Overrides Function CreateUI() As RadPageViewElement Select Case Me.ViewMode Case PageViewMode.Stack Return New RadPageViewStackElement() Case PageViewMode.Outlook Return New RadPageViewOutlookElement() Case PageViewMode.ExplorerBar Return New RadPageViewExplorerBarElement() Case PageViewMode.Backstage Return New MyRadPageViewBackstageElement() Case Else Return New RadPageViewStripElement() End Select End Function End Class Public Class MyRadPageViewBackstageElement Inherits RadPageViewBackstageElement Protected Overrides ReadOnly Property ThemeEffectiveType() As Type Get Return GetType(RadPageViewBackstageElement) End Get End Property Protected Overrides Function SelectNextItemCore(current As RadPageViewItem, forward As Boolean, wrap As Boolean) As Boolean Return MyBase.SelectNextItemCore(current, forward, False) End Function Protected Overrides Sub ProcessKeyDown(e As KeyEventArgs) If Me.IsNextKey(e.KeyCode) AndAlso Not Me.IsEditing Then Me.SelectNextItem() ElseIf Me.IsPreviousKey(e.KeyCode) AndAlso Not Me.IsEditing Then Me.SelectPreviousItem() ElseIf e.KeyCode = Keys.Home AndAlso Not Me.IsEditing Then Me.Owner.SelectedPage = Nothing Me.SetSelectedItem(Me.Items.First()) ElseIf e.KeyCode = Keys.End AndAlso Not Me.IsEditing Then Me.Owner.SelectedPage = Nothing Me.SetSelectedItem(Me.Items.Last()) ElseIf e.KeyCode = Keys.F2 Then BeginEdit() ElseIf e.KeyCode = Keys.Escape Then CancelEdit() ElseIf e.KeyCode = Keys.Enter AndAlso Me.IsEditing AndAlso Me.ActiveEditor.Validate() Then EndEdit() End If End Sub End Class
To reproduce: for (int i = 0; i < 20; i++) { this.radPageView1.Pages.Add(new RadPageViewPage("Page" + i)); } this.radPageView1.ViewMode = PageViewMode.Backstage; Only a few of the pages are visible and the user is not allowed to scroll to see the rest of them. Workaround: 1. Make use of the strip buttons: RadPageViewBackstageElement el = this.radPageView1.ViewElement as RadPageViewBackstageElement; el.ItemContainer.ButtonsPanel.Visibility = ElementVisibility.Visible; 2. Place the control in RadScrollablePanel RadScrollablePanel scrollablePanel = new RadScrollablePanel(); scrollablePanel.Dock = DockStyle.Fill; this.Controls.Add(scrollablePanel); RadPageView pageView = new RadPageView(); pageView.ViewMode = PageViewMode.Backstage; scrollablePanel.Controls.Add(pageView); for (int i = 0; i < 50; i++) { pageView.Pages.Add(new RadPageViewPage("Page " + i.ToString())); } pageView.Size = new System.Drawing.Size(1000,2500);
To reproduce: 1. Drag and drop RadPageView on the form 2. Select the control and open a smart tag 3. You will see that the 'Dock in parent container' option is not added
RadPageView - Add support for Kinetic Scrolling.
Feature missing in the Outlook mode of the PageView control is the ability to move a page up or down (i.e., change their order). This is accomplished with an additional menu item called "Navigation Pane Options", and a checked list box with all available pages and up/down buttons. Related to this would be a way to serialize the PageView content and order to XML.
There should be such property which is available in the properties window. The property should get/set the default selected page for a RadPageView when it is loaded for the first time. Also, this property should not be affected by changing the selected page in the Visual Studio designer.
Currently, when trying to replace the item, exception is thrown.
Show the focus cue of the selected tab in a StripView RadPageView.
Add a Visible property to RadPageView Pages for all modes
Provide an easier way to change the size of the tabs panel of RadPageView in Backstage mode at design time.
IMPROVE. RadPageView - in ExplorerBar mode, add a method which will scroll the item into view and the item will be on the top on the control. Currently, the ScrollToItem method, scrolls to the item and whenever it finds it the scrolling is stopped. Alternatively, add a method which will ensure that the item and its content are is visible. Resolution: Add the ScrollToControl method. Please take a look at the following code snippet how to use it: RadPageViewExplorerBarElement view = radPageView1.ViewElement as RadPageViewExplorerBarElement; view.ScrollToControl(control);
ADD. RadPageView - allow RadPageViewItems to accept other RadElements. Currently, they are not arranged.
There should be a method called BeginEdit of the item, which puts it in edit mode. Also, when the user pressed F2 the item should begin editing. The latter should be controlled via AllowEdit property.