Heat butter in a medium saucepan over a medium heat until sizzling. Add flour. Cook, whisking, for 2 minutes. Remove pan from heat. Gradually add milk, whisking between additions until smooth before adding more. Return pan to medium heat and whisk in cream. Whisk frequently for 7 minutes or until thickened. Season. Add cheddar and half a cup of the parmesan and whisk until melted. Remove from heat. Cover and set aside.
Heat a large, non-stick frying pan over a medium-high heat. Cook all mushrooms in three batches, with a third of the oil and garlic in each batch, stirring occasionally, for about 4 minutes or until golden. Add a third of a cup of the wine to each batch and cook for 1 minute or until mostly absorbed. Transfer batches to a bowl and cook for 1 minute or until mostly absorbed. Transfer batches to a bowl as they are cooked. Stir in herbs. Season. Set aside.
Preheat oven to 180 degrees C. Grease a 9-10 cup capacity ovenproof dish with butter. Spread a thin layer (about half a cup) of white sauce over the base of dish. Cut lasagne sheets to fit a single layer over the base. Next, layer with a third of the mushroom mixture, then a third each of the remaining white sauce, remaining parmesan and mozzarella. Repeat with another layer.
For final layer, spread remaining sauce over lasagne sheet, then cheeses and lastly spread remaining mushrooms on top. Cover with a lid or foil. Bake for 30 minutes. Uncover, bake for a further 20 minutes or until golden. Allow to stand for 15 minutes before cutting to serve.
You can use 1kg of button mushrooms as a substitute for Portobello and Swiss brown mushrooms.