2010-01-19 17 views
8

Ich habe eine randlose Anwendung in WPF erstellt, und es funktioniert ziemlich gut. Wenn ich WindowState jedoch auf den Vollbildmodus einstelle, benötigt die Anwendung mehr Platz als meine Bildschirmauflösung. Daher befinden sich einige Pixel außerhalb des Bildschirms in allen Richtungen! (sieht aus wie einige hart kodierte negative Ränder hinzugefügt werden, um den Standardrahmen auszublenden)Borderless-Fenster-Anwendung nimmt mehr Platz als meine Bildschirmauflösung

Irgendwelche Ideen, wie man dies verhindern kann?

Meine XAML:

<Window x:Class="MyApp.Shell" 
    WindowStyle="None" 
    BorderThickness="0" 
    AllowsTransparency="True" 
    Background="Transparent" 
    ResizeMode="CanResizeWithGrip" 
    WindowState="{Binding MainApplicationWindowState}" 
    ... 

Auch ein anderes Problem, das ich gesehen habe, ist, dass die Windows-Symbolleiste/Taskleiste in dem Gross Zustand bedeckt ist, so sieht es aus wie die „eigentliche“ Bildschirmhöhe verwendet wird und nicht die "verfügbare" Bildschirmhöhe, dh Bildschirmhöhe abzüglich der Windows-Symbolleiste/Taskleiste!

Wer hat eine Lösung für diese Probleme gefunden?

Dank

Antwort

2

ich das Problem auf diese Weise gelöst:

XAML:

WindowStyle="None" 
Left="0" 
Top="0" 
Width="{Binding WPFSettings.Width}" 
Height="{Binding WPFSettings.Height}"> 

Visual Basic:

Public Class WPFSettings 
    Public ReadOnly Property Width() As Double 
     Get 
     Return System.Windows.SystemParameters.PrimaryScreenWidth 
     End Get 
    End Property 

    Public ReadOnly Property Height() As Double 
     Get 
     Return System.Windows.SystemParameters.PrimaryScreenHeight 
     End Get 
    End Property 
End Class 

Es funktioniert ziemlich gut.

+1

Dank. Werde es ausprobieren. Ein Problem, das ich mit der PrimaryScreenHeight sehe, ist, wenn ein zweiter Monitor verwendet wird, aber das sollte ziemlich einfach zu umgehen sein! Eine Note; Da Sie oben und links verwenden, was ist mit Bottom und Right? Werden sie sich noch weiter aus dem Bildschirm entfernen? –

+0

Perfekt. Aber für mich funktioniert es nur, wenn ich oben auf dem XAML, das Sie hier gepostet haben, auch WindowState = "Maximized" setze. –

0

In XAML legen Sie die folgende Bindung auf dem Window.MaxHeight:

MaxHeight="{DynamicResource {x:Static SystemParameters.MaximizedPrimaryScreenHeightKey}}" 

Keine Notwendigkeit für eine zusätzliche Hilfsklasse.

+6

Aber was, wenn ich meine Anwendung auf einem zweiten Monitor benutzen möchte? –

0

In meinem Fall hatte das XAML-Tag des Fensters die Eigenschaft SizeToContent = "True" und ich musste es nur entfernen.

3

ich diese große Lösung für mich

<Window WindowStyle="None" WindowStartupLocation="CenterScreen" WindowState="Maximized" 
     MaxWidth="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Width}" 
     MaxHeight="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Height}" 
    > 
... 
</Window> 

Aber Fehler gefunden immer noch besteht, Fenster durch wenige Pixel auf Offset und links ... Ich habe versucht, Links und Oben auf 0 zu setzen, nachdem ich Fensterstatus ändern aber nichts passiert.

1

Versuchen Sie, diese

Width="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Width}" 
Height="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Height}"