10
votes

L'application de fenêtre sans bordure prend plus d'espace que ma résolution de l'écran

J'ai créé une application sans bordure dans WPF, et cela fonctionne plutôt bien. Toutefois, lorsque je réglais le Windowstate sur plein écran, l'application prend plus d'espace que ma résolution de mon écran. Il existe donc des pixels à l'extérieur de l'écran dans toutes les directions! (On dirait que certaines marges négatives codées dures sont ajoutées pour masquer la bordure par défaut)

Des idées Comment empêcher cela de se produire? P>

My XAML: P>

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


1 commentaires

WOW il y a 9 ans: D Le problème n'apparaît que lorsque la définition de la méthode et d'un windowChrome est définie?


8 Réponses :


2
votes

J'ai résolu le problème de cette façon:

xaml: strong> p> xxx pré>

visual basique: strong> p >

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


2 commentaires

Merci. Va essayer de sortir. Un problème que je vois avec le primaireCreeNheight est quand un deuxième moniteur est utilisé, mais cela devrait être assez simple de fonctionner! Une note; Puisque vous utilisez le haut et la gauche, qu'en est-il du fond et non? Vont-ils bouger encore plus loin de l'écran?


Parfait. Mais pour moi, cela ne fonctionne que sur le dessus de la XAML que vous avez posté ici, j'ai également défini Windowstate = "Maximized"



0
votes

in xaml définissez la liaison suivante sur la fenêtre .maxheight : xxx

pas besoin d'une classe d'utilités supplémentaire.


1 commentaires

Mais que si je veux utiliser ma demande sur un deuxième moniteur?



0
votes

Dans mon cas, la balise XAML de la fenêtre avait la propriété sizetocontent = "vrai" et tout ce que je devais faire était de le supprimer.


0 commentaires

4
votes

J'ai trouvé cette excellente solution xxx

mais erreur pour moi persiste, Windows est compensé par quelques pixels sur le dessus et à gauche ... J'ai essayé de régler la gauche et la haut à 0 après que je suis Changer l'état de la fenêtre mais rien ne se passe.


0 commentaires

1
votes

Essayez ceci xxx


0 commentaires

1
votes

Une fonctionnalité nouvelle de .NET a résolu ce problème. Laissez votre windowstyle = "monoborderwindow" code> ou "threedborderwindow" code> Laisser resizemode = "canréesize" code>, puis ajoutez ceci au xaml à l'intérieur de la fenêtre

<Window>
    <WindowChrome.WindowChrome>
        <WindowChrome GlassFrameThickness="0" CornerRadius="0" CaptionHeight="0" 
            UseAeroCaptionButtons="False" ResizeBorderThickness="7" />
    </WindowChrome.WindowChrome>
</Window>


3 commentaires

Cela ne fonctionne pas et lorsque vous utilisez un windowstyle! = Aucune autorouteTransparence doit être faux!


Je viens de l'essayer avec Windowstyle = "Aucun" et Permettransparency = "vrai" et ça marche très bien. Il permet de redimensionner comme s'il y avait une bordure et lorsque la fenêtre est maximisée, il ne couvre pas le menu Démarrer. (J'ai testé avec .NET 4.7.2, n'a pas essayé de versions antérieures)


Merci c'est la seule solution qui a fonctionné pour moi, utilisez également .NET 4.7.2



0
votes

J'avais besoin de cela pour travailler à travers différents affichages de taille (comme la plupart des gens qu'il sonne). Donc, j'ai simplement fait cela ...

<Window x:Class="MyApp.MainWindow"
    ResizeMode="CanResize" 
    WindowStyle="SingleBorderWindow"
    SizeChanged="Window_SizeChanged">
....
Code
....
</Window>


public void Window_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if (this.WindowState == WindowState.Maximized)
        {
            this.BorderThickness = new System.Windows.Thickness(8);
        }
        else
        {
            this.BorderThickness = new System.Windows.Thickness(0);
        }
    }


0 commentaires

-1
votes

J'utilise un déclencheur sur la fenêtre:

<Style.Triggers>
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=WindowState}" Value="{x:Static WindowState.Maximized}">
        <Setter Property="BorderThickness" Value="8"/>
    </DataTrigger>
</Style.Triggers>


0 commentaires