Skip to content
Shiny Controls v1.0 - The Ultra Control Suite for .NET MAUI & BlazorO...M...G!

Slide Viewer | Presenting Mode

SlideView has a second job: showing the deck to a room. Presenting mode fits the slide edge to edge on black with no border and no margin, drops the app’s chrome, and puts a control bar over it that fades out of the way.

<office:SlideView x:Name="Viewer"
Deck="{Binding Deck}"
IsPresenting="{Binding Presenting}"
PresentingChanged="OnPresentingChanged" />
this.Viewer.StartPresenting();
this.Viewer.StopPresenting();
this.Viewer.TogglePresenting();
<SlideView @ref="viewer" Deck="deck" @bind-IsPresenting="presenting" />
@code {
SlideView? viewer;
bool presenting;
Task PresentAsync() => this.viewer!.StartPresentingAsync();
}
Advance Tap or click anywhere. The left quarter goes back. Swipe on MAUI, wheel and arrow keys on Blazor.
Control bar Previous, a counter, next, Notes, Exit. Fades after a few seconds of no input and comes back on a touch or pointer move. Off with ShowPresenterControls.
Speaker notes The Notes button appears only when some slide in the deck has notes. The panel it opens does not fade with the bar.
Leaving Escape on Blazor, the back gesture on MAUI, or Exit. IsPresenting writes back either way.
Keys (Blazor) F5 starts a show, Escape leaves one — PowerPoint’s own.
Screen MAUI keeps the display awake for the length of the show (KeepScreenOnWhilePresenting, default on).

Mode is ignored while presenting and restored when the show ends. A thumbnail wall is how you find a slide, not how you show one — so entering a show from SlideViewMode.Grid presents the current slide and puts the grid back afterwards. The inline viewer is left on the slide the show ended on, not the one it started from.

MAUI pushes a modal page. Re-parenting the viewer would rebuild its platform view — a visible stall on a canvas — and would mean lifting it out of whatever layout the consumer put it in and putting it back exactly right afterwards. The show page carries its own SlideView over the same deck. It is also why the platform back gesture works: the page is a real page, and dismissing it ends the show through IsPresenting rather than popping out from under the viewer.

Blazor covers the viewport with CSS and asks for fullscreen on top of that. In that order, deliberately: requestFullscreen can be refused — an iframe without allowfullscreen, iOS Safari, prerendering, a gesture the browser did not accept — and a refusal still has to give the room a full-window deck rather than nothing at all. The fullscreenchange listener is what keeps IsPresenting honest about exits the component never asked for, since Escape and F11 never reach its own key handler.

Presenting also pins the theme. The surround is black whatever the app or page is set to, and the border between slide and surround is dropped — a viewer’s chrome is part of an app, but on a projector any lift at all reads as a grey frame around the deck.

The presenter panel reads Slide.Notes, the same speaker notes the inline viewer exposes:

deck.Slides[0].Notes;
viewer.CurrentNotes; // Blazor: notes on the slide being shown

It stays open once opened. Notes are read while you are talking rather than while you are moving the pointer, so fading them on the bar’s timer would mean wiggling the mouse to finish a sentence.