To reproduce: add a RadPageView in NavigationView and set the following property:
Dim view As RadPageViewNavigationViewElement = TryCast(Me.RadPageView1.ViewElement, RadPageViewNavigationViewElement)
view.CollapsedPaneWidth = 300
The expected result is that the navigation view default's width is set to 300 when loading. However, it is adjusted when you expand and collapse the hamburger.
When you set the RightToLeft property to Yes, you will obtain incorrect layout. Please refer to the attached gif file.
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.