2012-04-02 17 views
24

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 classe base di tutte le nostre finestre 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).Come posso modificare il bordo e la barra del titolo di una finestra in WPF?

RadWindow di Telerik è un controllo utente standard che simula il comportamento di una finestra di dialogo in modo che lo stile non fosse 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 oggetti:

  • Titolo barre colore
  • 3 pulsanti standard
  • della finestra colore

reale confine con angoli arrotondati, se possibile.

risposta

22

Queste sono aree "non client" e sono controllate da Windows. Here is the MSDN docs on the subject (le informazioni pertinenti sono in alto).

Fondamentalmente, si imposta WindowStyle = "Nessuno" della finestra, quindi si crea la propria interfaccia della finestra. (similar question on SO)

+0

I tuoi collegamenti erano ciò che stavo cercando ma non ho trovato. A quanto pare, ho bisogno di migliorare le mie competenze di Google ;-) –

+1

@ MarcelGosselin Mi è stato detto che il mio google-fu è forte :) felice di poter dare una mano fuori –

+0

Risposta sbagliata. Prima di tutto RadWindow non supporta la proprietà WindowStyle. E due, la "domanda simile" non riguarda nemmeno i controlli di Telerik. – dvallejo

11

è necessario impostare

WindowStyle="None", AllowTransparency="True", e facoltativamente ResizeMode="NoResize"
e quindi impostare la proprietà Style della finestra per il vostro stile di finestra personalizzata, in cui si progetta l'aspetto della finestra (barra del titolo, pulsanti, confine) a tutto ciò che vuoi e mostra i contenuti della finestra in un ContentPresenter.

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

+0

Questo [esempio di codice] (https://code.msdn.microsoft.com/WPF-styling-a-Window-in-fcf4e4ce) fornisce un esempio di come sostituire lo stile predefinito mantenendo tutte le funzionalità predefinite (barra del titolo, bordo della finestra, pulsanti della finestra, trascinamento, rilascio e ridimensionamento). – JayChase

+0

WindowStyle = "Nessuno", AllowsTransparency = "True" (hai dimenticato le "s" in Permetti) – mcissel

+0

Perché sarebbe necessario cambiare la modalità di ridimensionamento? Ciò interrompe qualsiasi movimento della finestra usando la tastiera (Win + Arrow Keys) o richiede che sia aggiunto. – StingyJack

5

ho trovato una soluzione più semplice da commentare @DK nel this question, la soluzione è scritto da Alex e described here con la fonte, Per rendere la finestra personalizzata:

  1. scaricare il progetto di esempio here
  2. modifica il file generic.xaml per personalizzare il layout.
  3. divertiti :).
1

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

Stavo cercando la stessa cosa e cado sulla soluzione open source this, spero che possa essere d'aiuto.

2

Controllare il seguente esempio WPF customizing the appearance of a window in XAML

questo esempio viene illustrato come personalizzare pieno lo stile/comparsa di una finestra, comprese le aree non-client: barra del titolo, i confini, massimo, minimo e pulsanti di chiusura mentre ancora fornendo tutte la funzionalità prevista

+0

Un collegamento a una soluzione è il benvenuto, ma per favore assicuratevi che la vostra risposta sia utile senza: [aggiungere contesto intorno al collegamento] (// meta.stackexchange.com/a/8259) in modo che i vostri utenti abbiano un'idea di cosa sia e perché è lì, quindi cita la parte più pertinente della pagina a cui stai collegando nel caso in cui la pagina di destinazione non sia disponibile. [Le risposte che sono poco più di un collegamento possono essere cancellate.] (// stackoverflow.com/help/deleted-answers) – paper1111

+0

@ paper1111 perché giù voto, il tuo commento non è abbastanza? –

+0

Non l'ho svalutato, forse qualcuno dalla coda di revisione lo ha fatto – paper1111

Problemi correlati