At the moment the items in a similar setup can be navigated using the arrow keys
Add functionality for resizing the tabs of RadPageView pages (resizing the RadPageViewPageItem). Resolution : This functionality can be achieved with the MinSize/MaxSize properties. For example: radPageViewPage1.Item.MinSize = new Size(150, 30);
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); } } } }
Show the focus cue of the selected tab in a StripView RadPageView.
Add functionality to the control for selecting pages using access keys.
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.
The solution could be similar to the behavior of the control's Outlook mode.
ADD. RadPageView - add scrolling functionality in RadPageViewStackMode where the scroll buttons appear below and above the page items
When RadPageView is in the ExplorerBar view, it should order its pages' bars opposite to the order of the Stack view.
A nice addition to RadPageView will the ability to scroll by pixel or by page.
User should be able to define the position of the strip buttons. For example, the ItemList buttons should be situated on the left side of RadPageView while the scroll buttons should be on the right side.
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
This feature request refers to RadPageView in Strip ViewMode, which supports a multi-line StripElement. Thus StripItems will appear in different lines.
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);