How to control navigation in RadWizard

6 posts, 1 answers
  1. Thys
    Thys avatar
    17 posts
    Member since:
    Mar 2014

    Posted 20 Apr 2015 Link to this post

    The new RadWizard control has the potential to be very useful. We use a lot of wizards in our application. These are all "manually" implemented currently. I had a look at the new RadWizard control and it has the potential to simplify this quite a lot.

     Currently the documentation is a bit lacking (I know it is in beta). However, some questions:

    1) How can I modify the default navigation?

    I tried linking to the "next" event on the wizard, and then, based on some parameters setting the SelectedpageIndex. This works well for most cases. However, how do I cancel any navigation after the "next" button has been clicked? As an example in some transitions we do some validation,which fails. An error message is displayed, but there does not seem to be an obvious way to stay on the current page. If I leave the selectedpageindex to the current page it still navigates to the next one regardless.

    2) Is there any way to have a tag of some sort linked to the individual pages?

    In the code with custom navigation there is a lot of reference to "if pageindex =x then do this etc.", but the value of the page index depends on the sequence in which the pages are added in the xaml. I would like to be able to assign some id in the xaml so that if we refer to a specific page in the code we always know it is the same page, regardless of the sequence in which is was added.

     

  2. Answer
    Yoan
    Admin
    Yoan avatar
    1197 posts

    Posted 21 Apr 2015 Link to this post

    Hi,

    I would suggest you to use the SelectionChanging event since you can cancel it based on some condition. In this way you will cancel the navigation  to other page. As for you other question - you can give a name of your WizardPages:
    <telerik:RadWizard x:Name="myWizard" SelectionChanging="myWizard_SelectionChanging">
                <telerik:RadWizard.WizardPages>
                    <telerik:WizardPage Header="0" x:Name="page0"/>
                    <telerik:WizardPage Header="1"  x:Name="page1"/>

    Then in the SelectionChanging event you can check the name of the new page (args.NewPage):
    private void myWizard_SelectionChanging(object sender, SelectedPageChangingEventArgs e)
        {
            if (e.NewPage.Name == "page1")
            {
                e.Cancel = true;   
            }
        }


    I hope this information helps.


    Regards,
    Yoan
    Telerik
     

    See What's Next in App Development. Register for TelerikNEXT.

     
  3. Thys
    Thys avatar
    17 posts
    Member since:
    Mar 2014

    Posted 23 Apr 2015 in reply to Yoan Link to this post

    This solved the problem, thanks.
  4. Dean
    Dean avatar
    66 posts
    Member since:
    Aug 2011

    Posted 26 Apr 2018 in reply to Yoan Link to this post

    Yoan said:Hi,

    I would suggest you to use the SelectionChanging event since you can cancel it based on some condition. In this way you will cancel the navigation  to other page. As for you other question - you can give a name of your WizardPages:
    <telerik:RadWizard x:Name="myWizard" SelectionChanging="myWizard_SelectionChanging">
                <telerik:RadWizard.WizardPages>
                    <telerik:WizardPage Header="0" x:Name="page0"/>
                    <telerik:WizardPage Header="1"  x:Name="page1"/>

    Then in the SelectionChanging event you can check the name of the new page (args.NewPage):
    private void myWizard_SelectionChanging(object sender, SelectedPageChangingEventArgs e)
        {
            if (e.NewPage.Name == "page1")
            {
                e.Cancel = true;   
            }
        }


    I hope this information helps.
     

    How do you select the page to navigate to instead?

    If I use SelectedPage property, it doesn't open that page, I get exception below instead...

            if (e.NewPage.Name == "page1")
            {
                e.Cancel = true;   

                MyRadWizard.SelectedPage = Page2;

            }

     

    System.ArgumentException: '-1' is not a valid value for property 'Column'.
       at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
       at System.Windows.Controls.Grid.SetColumn(UIElement element, Int32 value)
       at Telerik.Windows.Controls.TileViewPanel.GetRestoredRect(RadTileViewItem child)
       at Telerik.Windows.Controls.TileViewPanel.ArrangeRestoredChildren()
       at Telerik.Windows.Controls.TileViewPanel.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
       at System.Windows.Controls.ItemsPresenter.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.ScrollContentPresenter.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
       at System.Windows.Controls.ScrollViewer.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
       at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
       at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
       at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
       at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
       at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
       at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.Window.ArrangeOverride(Size arrangeBounds)
       at Telerik.Windows.Controls.InternalWindow.ChromelessWindowHelper.WindowHostWindow.ArrangeOverride(Size arrangeBounds)
       at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
       at System.Windows.UIElement.Arrange(Rect finalRect)
       at System.Windows.ContextLayoutManager.UpdateLayout()
       at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
       at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork()
       at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
       at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
       at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
       at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
       at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

  5. Dean
    Dean avatar
    66 posts
    Member since:
    Aug 2011

    Posted 27 Apr 2018 in reply to Dean Link to this post

    I don't get that exception every time, not sure under what conditions it happens but what I noticed is that after setting the SelectedPage property the SelectionChanging event is fired again and it all looks good but then the NewPage somehow again becomes page1...
  6. Yoan
    Admin
    Yoan avatar
    1197 posts

    Posted 01 May 2018 Link to this post

    Hello Dean,

    Looking at the provided StackTrace, it seems that the problem is in the TileViewPanel of our RadTileView control. However, we are not aware of such exception. May I ask you to isolate the problem in a sample project which can be debugged at our side? This will help us for identifying the cause of the problem and providing a fix for it. May I also ask you to share the exact version of the controls that you are using?

    Regards,
    Yoan
    Progress Telerik
    Try our brand new, jQuery-free Angular 2 components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
Back to Top