Come posso modellare il bordo e la barra del titolo di una finestra in WPF?

Stiamo sviluppando un’applicazione WPF che utilizza la suite di controlli di Telerik e tutto funziona e sembra a posto. Sfortunatamente, di recente abbiamo dovuto sostituire la class base di tutte le nostre windows di dialogo, cambiando RadWindow dalla finestra standard di WPF (la ragione è irrilevante per questa discussione). In tal modo, abbiamo finito per avere un’applicazione che sembrava ancora carina su tutti i computer degli sviluppatori (Windows 7 con Aero abilitato), ma era brutta quando veniva utilizzata nell’ambiente del nostro client (Servizi terminal in Windows Server 2008 R2).

Il RadWindow di Telerik è un controllo utente standard che simula il comportamento di una finestra di dialogo in modo tale da non rappresentare un problema. Con la finestra di WPF, però, ho difficoltà a cambiare il suo “confine”. Quello che intendo per “bordo” qui è sia la barra del titolo con l’icona e i 3 pulsanti standard (Riduci a icona, Ingrandisci / Ripristina, Chiudi) e il grip di ridimensionamento attorno alla finestra.

Come posso cambiare l’aspetto di questi elementi:

  • Colore della barra del titolo
  • 3 pulsanti standard
  • Colore del bordo reale della finestra

Con gli angoli arrotondati, se ansible.

Quelle sono aree “non client” e sono controllate da Windows. Ecco i documenti MSDN sull’argomento (le informazioni pertinenti sono in alto).

Fondamentalmente, hai impostato WindowStyle = “Nessuno” di Window, quindi crea la tua interfaccia di finestra. ( domanda simile su SO )

È necessario impostare

WindowStyle="None" , AllowsTransparency="True" e opzionalmente ResizeMode="NoResize"
e quindi impostare la proprietà Style della finestra sullo Style della finestra personalizzata, in cui si progetta l’aspetto della finestra (barra del titolo, pulsanti, bordo) su tutto ciò che si desidera e si visualizza il contenuto della finestra in un ContentPresenter .

Questo sembra essere un buon articolo su come è ansible ottenere questo, ma ci sono molti altri articoli su Internet.

Ho trovato una soluzione più diretta dal commento di @DK in questa domanda , la soluzione è stata scritta da Alex e descritta qui con l’origine, Per rendere la finestra personalizzata:

  1. scarica qui il progetto di esempio
  2. modificare il file generic.xaml per personalizzare il layout.
  3. godere :).

Controlla il seguente esempio di WPF personalizzando l’aspetto di una finestra in XAML

Questo esempio mostra come personalizzare completamente lo stile / l’aspetto di una finestra, comprese le aree non client: barra del titolo, bordi, pulsanti max, min e chiudi, pur continuando a fornire tutte le funzionalità previste.

Ti suggerisco di iniziare da una soluzione di base e di personalizzarla in base alle tue esigenze, è meglio quindi iniziare da zero!

Stavo cercando la stessa cosa e cito su questa soluzione open source, spero che possa essere d’aiuto.