Il metodo Navigate vuole un riferimento all'oggetto a cui spostarsi, mentre primapagina, secondapagina eccetera sono nomi di variabili (ovvero, riferimenti a oggetti di tipo Page1 ... Page4). Come fa Navigate a sapere come hai chiamato nel tuo codice quegli oggetti?

Per risolvere, puoi memorizzare le varie pagine, invece che come variabili sparse, in un container associativo (ad esempio in un Dictionary<string, Page>), in cui puoi cercare a runtime i vari oggetti che ci hai memorizzato in base al nome assegnato.
(si potrebbe fare anche con "variabili sparse" via reflection, ma è inutilmente più complicato)