A possible workaround here is to make the panel parent of the buttons visible.
RadPageViewStripElement element = this.radPageView1.ViewElement as RadPageViewStripElement;
element.ItemContainer.ButtonsPanel.DrawFill = true;
element.ItemContainer.ButtonsPanel.NumberOfColors = 1;
At the moment the items in a similar setup can be navigated using the arrow keys
How to reproduce:
public Form1()
{
InitializeComponent();
this.radPageView1.ItemSizeMode = Telerik.WinControls.UI.PageViewItemSizeMode.EqualSize;
this.radPageView1.ItemSize = new Size(50, 20);
}
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);
I attached a video and the code I used. I am trying to remove and add pageviews. (I would hide them it i knew how)
When I add the pageview back in while the hamburger menu is closed it somewhat expands the tabs. I would like it to leave it closed
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
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.
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
Let's say that you have RadPageView in ExplorerBar mode and the Content Size mode is set to AutoSizeToBestFit. Dock two buttons in the content area to top. Run the app and you will see that the bottom of the second button is cut in some themes. This is because these themes has a border set to the content area. The border is taken into consideration by the layout and the content is cut even throught there is space for it. This happens with Windows7, Office2010Black and other themes.
One can't set the image scaling of the pages' tabs. For example if you have a big image and you want to scale it down to a size of 10x10, you will not be able to do so.