I don't know if it's relevant, but before these calls I was using a TabControl to manage some other pages, but I expected assigning App.KeyController = NavControl would mean the pages that I display now would be unaffected by what went before in the TabControl.
Thanks for the suggestion. Does this get the layout values for the currently displayed page (i.e. taking into account space taken up by the TabControl etc)?
As this problem only affected one routine, which was being passed the rootpanel of the page it was to display on, I ended up getting the width/height of the rootpanel and using that. Another in the long line of hurdles to jump in porting my app to iOS ;^)