This is a migrated thread and some comments may be shown as answers.

How to control navigation in RadWizard

5 Answers 281 Views
Wizard
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Thys
Top achievements
Rank 1
Thys asked on 20 Apr 2015, 06:12 AM

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.

 

5 Answers, 1 is accepted

Sort by
0
Accepted
Yoan
Telerik team
answered on 21 Apr 2015, 06:01 AM
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.

 
0
Thys
Top achievements
Rank 1
answered on 23 Apr 2015, 11:58 AM
This solved the problem, thanks.
0
Dean
Top achievements
Rank 1
answered on 26 Apr 2018, 08:43 PM
[quote]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.
 

[/quote]

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)

0
Dean
Top achievements
Rank 1
answered on 27 Apr 2018, 02:37 PM
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...
0
Yoan
Telerik team
answered on 01 May 2018, 03:17 PM
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.
Tags
Wizard
Asked by
Thys
Top achievements
Rank 1
Answers by
Yoan
Telerik team
Thys
Top achievements
Rank 1
Dean
Top achievements
Rank 1
Share this question
or