2016-02-07 16 views
6

Quando ho provato ad allineare la finestra con il lato o l'angolo del display, ho scoperto che ci sono alcuni tipi di padding tra il bordo dello schermo e il bordo della finestra. avevo creato nuovo progetto WPF da modello, aggiunto solo due righe in costruttore e ottenuto questo:WPF e Windows 10. Bordo invisibile attorno alle finestre?



Perché non si adattano al bordo dello schermo? Stesso problema quando cerco di mettere la finestra verso l'angolo in basso a destra in questo modo:

Rect workArea = SystemParameters.WorkArea; 
Left = workArea.Location.X + workArea.Width - Width; 
Top = workArea.Location.Y + workArea.Height - Height; 

Sembra che la finestra ha 7px confine (proprio come su win7), ma invisibile sulla win10. Inoltre ho scoperto che se ho impostato sia WindowStyle a WindowStyle.None e ResizeMode a ResizeMode.NoResize, il sistema posiziona correttamente la finestra, ma questo non è quello che mi serve. In Win7 lo stesso programma funziona come previsto.

Di cource è possibile impostare la proprietà Left su -7, ma non è una soluzione. Come posso impostare correttamente il posto della finestra, in modo che possa apparire bene sia su win7 che su win10?

+0

In caso di fondo inferiore destro hai provato le proprietà ActualWidth & ActualHeight (dopo il display)? –

+0

@KyloRen sì, il risultato è lo stesso – BlackOverlord

+0

potrebbe essere "this.Left = 0 - SystemParameters.ResizeFrameVerticalBorderWidth - SystemParameters.FixedFrameVerticalBorderWidth;" può essere utilizzato dal punto di vista della programmazione sulla finestra 10. Altrimenti è necessario utilizzare la classe ChromeWindow. –

risposta

5

Il bordo ridimensionabile a sinistra/a destra/in basso è ora invisibile su Windows 10 e tale margine è dove si trova. Se metti la finestra al centro dello schermo e trascini il mouse sul bordo sinistro della finestra, vedrai il cursore trasformarsi in un cursore di ridimensionamento per 8 pixel oltre il bordo della finestra. Questo ti dice che il confine esiste ancora.

È possibile ottenere le sostituzioni utilizzando una combinazione della normale funzione GetWindowRect e l'uso della funzione DwmGetWindowAttribute, insieme al parametro DWMWA_EXTENDED_FRAME_BOUNDS.

1

Lasciano le metriche uguali (ad esempio, PaddedBorderWidth nel registro è ancora -60) e raggiungono le maniglie di ridimensionamento chiare interamente nel tema ("Aero"). Non è vetro, è semplicemente completamente invisibile nel modo in cui Office 2013 li rende. La tua applicazione sarà letteralmente disegnare con le stesse coordinate pixel su Windows 7 e 10, solo Windows 7 avrà effetti di vetro che colmano quel vuoto.

+0

Ok, è possibile sapere se l'effetto vetro di Windows (e il suo spessore) o meno per evitare quel brutto spazio? – BlackOverlord

+0

Non ne sono a conoscenza. Dal momento che la dimensione del bordo viene applicata dal tema e non da windowmetrics nel registro, non penso che si possa nemmeno chiedere di determinarla. La prima cosa che viene in mente è semplicemente lo spostamento di molti pixel quando la versione di Windows viene rilevata come 10 o superiore. – CmdrKeene