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);
}
}
}
}
To reproduce: please follow the steps illustrated in the attached gif file. Workaround: add pages as follows: Click the Smart Tag of RadPageView and then click the Add Page link five times. Additional information how to get started with RadPageView is available in the following help article: https://docs.telerik.com/devtools/winforms/pageview/stripview/getting-started
Workaround: this.radPageViewPage1.Item.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
Show the focus cue of the selected tab in a StripView RadPageView.
Add functionality to the control for selecting pages using access keys.
To reproduce: please refer to the attached sample project and follow the illustarted steps in the attached gif file.
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.
Steps to reproduce:
1. Set the main screen on 125-percent scale
2. Run attached sample application (1107416 RadPageView Issue.zip).
3. Click menu item "ShowPageView". After showing the page view in a DocumentWindow, the SelectedPageChanging/SelectedPageChanged events are fired twice.
Workaround:
Replace RadPageView with custom one:
public class CustomPageView : RadPageView
{
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
this.SuspendEvents();
base.ScaleControl(factor, specified);
this.ResumeEvents();
}
}
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