ConfirmNavigationRequest does not work in WPF

Topics: Prism v4 - WPF 4
Jun 6, 2011 at 10:32 PM
Edited Jun 6, 2011 at 11:12 PM

I have been building a new .NET 4, WPF, Prism 4, MVVM, MEF application.  It has one module.  I have implemented a TreeView for navigation.  The nodes of the treeview change object type as you drill down.  Consequently, I have different main region views for each type.  I have the basic navigation working.  I can navigate to any node in the treeview and the correct view/viewmodel opens in the main window.  I am passing the viewmodel through a Prism command which each viewmodel implements.  This loads them along with the navigation.

So my next step is to implement the familiar "Save changes?" prompt.  The user makes changes and the clicks on a different treeview node, forgetting to save their changes.  My treeview viewmodel uses the following code pattern:

workAreaRegion.Context = selectedTreeViewItem;
UriQuery query = new UriQuery();
query.Add("Action", "Edit Level");
regionManager.RequestNavigate
(
    RegionNames.WorkAreaRegion
    , new Uri(ViewNames.MarketPropertiesView + query.ToString(), UriKind.Relative)
    , a => { }
);

In this scenario, there is a view model which has unsaved user changes, and the new navigation is attempting to leave that dirty view model.  The ConfirmNavigationRequest in the dirty view model looks like this:

void IConfirmNavigationRequest.ConfirmNavigationRequest(
    NavigationContext navigationContext,
    Action continuationCallback)
{
    if (isDirty)
    {
        continuationCallback(false);
    }
    else
    {
        continuationCallback(true);
    }
}

What is driving me crazy is that the false is ignored!  I have stepped into this too many times.  The continuationCallback is set to false and yet the navigation still continues.  I intend to implement a WPF "Window covering 'modal' prompt" (an overlay toggling Collapsed), but until I can get the hard coded continuationCallback(false) to halt navigation there is no point in creating a user prompt to supply the false value.  I started adding code in the treeview view model to catch the call back and somehow determine the preceding View and re-navigate back to it in the treeview but the requestNavigate does not register the view with a name.  I might try using the Journal GoBack capability, but I should not need to, and I have not seen any examples going to all this trouble.

The Prism4 QuickStarts ViewSwitchingNavigation is built with Silverlight.  I set up my WPF code exactly the same but the modal window never appears.  I think this is because there is no ChildWindow class in WPF.  The Prism4 QuickStarts needs a WPF ViewSwitchingNavigation example. 

I looked into the MVVM InTheBox solution.  He has implemented a "modal window", but it only covers the active view - which is almost useless.  And his navigation is too fake.  The nav buttons are on the same view and they never issue the RequestNavigate.  He has no continuationCallback.

I looked into the Prism4 MVVM RI.  It contains neither the "RequestNavigate" nor "ConfirmNavigationRequest".

Is there anyone who has used RequestNavigate and cancelled navigation successfully in WPF?

Is there anyone who has used RequestNavigate and a "modal window" and then cancelled navigation successfully in WPF?

Sincerely, Joe

Jun 6, 2011 at 10:54 PM
Edited Jun 6, 2011 at 11:06 PM

How does the InteractionRequest<Confirmation> connect to the view that is uses?

How can I change it to connnect to the view I created?

I want to have a view that covers the whole WPF Window, thereby disabling all navigation except for the "modal" interation.  I have a nice UserControl, modeled after the one from MVVM InTheBox, but I need help designing how to call it from the Prism4 InteractionRequest.

Joe

Jun 7, 2011 at 1:39 PM

Joe,

You are correct, there is no child window in WPF.  Also Prism does not include the UI for an interaction request for WPF. It supports interaction requests but leaves the implementation to the developer.

The modal window I implemented for In the Box, can cover the entire UI or just the region it is in; for that application I only wanted it to cover the region.  It does it with a transparent rectangle. My implementation allows the model window to display and for the region to be navigated away and navigated back to.

I have used Prism navigation including cancelling in many of my applications.

You asked, "Is there anyone who has used RequestNavigate and a "modal window" and then cancelled navigation successfully in WPF?"  Yes. I would suggest you start off using the MessageBox until you get this working, as this is modal to the application.

If you post your application to the issues section we may be able to see the isuse.

Karl

Jun 7, 2011 at 8:22 PM

Thanks Karl.

Okay.  I am considering posting my solution.  Can it be deleted after we are finished looking at it?

I have been able to get a System.Windows.MsgBox and your InTheBox WPF UserControl to popup.  But neither can cancel the navigation.  Hard-coding continuationCallback(false); does not stop the navigation!

I generated a WPF-MEF-Prism4 solution using the Prism4 Visual Studio AddIn.  It does exactly what I want to do.  I compared my code to theirs.  I cannot find any difference.  I made a few small changes, like [PartCreationPolicy(CreationPolicy.NonShared)] to no avail.  No matter what I do the navigation still continues!

If you tell me that I can pull the source code back down after a few days then I will put it in a new issue.

Joe

 

Jun 7, 2011 at 9:02 PM

Joe,

If you post a reply on my WordPress blog:  http://karlshifflett.wordpress.com/2011/05/07/announcing-a-prism-unity-wpf-mvvm-training-event/

Just leave a message like, "training sounds good."

I'll get your email address, I'll then email you back and you can send me the project or give me a Url I can pick the project up at.  I use my SkyDrive for stuff like this.

I should be able to figure this out for you.

Best,

Karl

Jun 7, 2011 at 9:05 PM
Edited Jun 7, 2011 at 9:07 PM

Karl,

Assuming that I eventually get my continuationCallback(false) problem resolved, I want to build a Silverlight ChildWindow style "modal window" for my ConfirmNavigationRequest InteractionRequests.  I coded an early version as a UserControl view on my ShellView.  It starts Collapsed and then covers the whole ShellView when an object on the ShellViewViewModel is set and indicates such.  I like it.  I showed it around and others like it.  It prevents all user interaction and navigation except for the binary choice presented.

1. I thought about using a Prism Command to shuttle the interaction data to the ShellViewViewModel, and perhaps a delegate to send the true/false result back to for the ContinuationCallback.  Do you think this is a good design? 
2. I also thought about creating a Prism Region in the ShellView that covers the whole Window.  Then I can Navigate/Activate my Silverlight ChildWindow style "modal window" view, but I think this additional navigation will replace the current navigation I am processing - right? 
3. Is there a third way?  Can I just activate the ShellView overlay after finding it in the RegionManager Views collection? 
4. Is there any way to take your example and refactor it from covering up a single view to covering up the entire Window? 
5. Is there any way to leverage the WPF Logical Tree to cover the Window from a View/ViewModel or does that violate Prism guidance? 

I am leaning toward the Prism Command to the ShellViewViewModel, number 1 above.
But my next steps are a little bit blocked until I get the continuationCallback(false) problem resolved.

Sincerely, Joe (in Florida)

 

Jun 7, 2011 at 9:12 PM

Joe,

We should speak on the phone, it will be much easier than back and forth email.

When you post a comment on my blog, I'll respond with my email and phone number.

Best,

Karl

Jun 7, 2011 at 9:39 PM

Will do.  I created a Word Press account.  I am waiting for the email.

I am learning a lot.  I am inclined to share it back to the community.  Is WordPress a good place for me to blog?  I have never blogged before?

Joe

Jun 7, 2011 at 9:51 PM

Joe,

WordPress is a great place to blog.

Karl

Jun 8, 2011 at 1:54 PM

Hi Joe,

I would love to hear back on your progress on this issue.  I would love to see a sample repo too.  

Regards,

John

Jun 8, 2011 at 2:51 PM
Edited Jun 8, 2011 at 2:53 PM

I can tell you the Visual Studio Prism Templates Addin (Prism.TemplatePack.1.4.vsix) has a WPF template that makes this navigation work.  However, it does use the old System.Windows.MessageBox.

My software 'looks' the same, but does not halt navigation.  Even a hard coded continuationCallback(false); does not halt navigation.

I will post the solution - when I resolve this.  (I hope it is interesting.)

Joe

P.S.  The Prism 4 Template Pack is from David Hill

http://blogs.msdn.com/b/dphill/archive/2011/03/04/prism-template-pack-1-4-now-with-mef-support.aspx

 

Jun 5, 2012 at 4:22 PM

Hey JoeKahl,

Have you been able to get this issue figured out yet?  I really would like to see a repro solution to this issue as I a struggling to get this to work with interactionrequest<T>.

Thanks in adavance.

Developer
Jun 8, 2012 at 6:41 PM
Edited Jun 8, 2012 at 6:42 PM

Hi,

As a possible sample using ConfirmNavigationRequest and InteractionRequests in WPF, I migrated the “Confirming and Cancelling Navigation sample” provided in the Navigation Lab of the Prism Training Kit, which was built for Silverlight.

Particularly, I replaced  the default PopupChildWindowAction provided with Prism which is only available for Silverlight with the custom TriggerAction implementation provided by Karl Shifflett in the In the Box - MVVM Training, which allows showing an overlay UI dialog for notifications.

Also, as an alternative scenario, I used the custom TriggerAction provided by Damian’s Cherubini in this blogpost to show the confirmation notification in a popup modal window instead.

You can find the sample in my SkyDrive account, under the name "WPFConfirmNavigationRequestSample.zip".

Take into account that, in order to change from one custom TriggerAction to the other, you have to replace the following lines in ModuleAView.xaml:

<interactionRequest:InteractionDialogAction>
    <interactionRequest:InteractionDialogAction.Dialog>
        <interactionRequest:ConfirmationLocalModalInteractionDialog />
    </interactionRequest:InteractionDialogAction.Dialog>
    <interactionRequest:InteractionDialogAction.ContentTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding}" TextWrapping="Wrap" FontSize="14" VerticalAlignment="Center" />
            </StackPanel>
        </DataTemplate> 
    </interactionRequest:InteractionDialogAction.ContentTemplate>
</interactionRequest:InteractionDialogAction>

With this other one:

<inf:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True"/>

I hope you find this useful,

Agustin Adami
http://blogs.southworks.net/aadami

 

<!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:EnableOpenTypeKerning /> <w:DontFlipMirrorIndents /> <w:OverrideTableStyleHps /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="--" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman","serif";} --> <!--[endif] -->using ConfirmNavigationRequest and InteractionRequests. Basically, I migrated the “Confirming and Cancelling Navigation sample” provided in the Navigation Lab of the Prism Training Kit, which was built for Silverlight.