2010-01-19 20 views
8

He creado una aplicación sin bordes en WPF, y funciona bastante bien. Sin embargo, cuando configuro WindowState en pantalla completa, la aplicación ocupa más espacio que la resolución de mi pantalla, por lo que hay algunos píxeles fuera de la pantalla en todas las direcciones. (Parece que se agregaron algunos márgenes negativos codificados para ocultar el borde predeterminado)La aplicación de ventana sin bordes ocupa más espacio que mi resolución de pantalla

¿Alguna idea de cómo evitar que esto suceda?

Mi xaml:

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

Además, otro problema que he visto es que la barra de herramientas/barra de tareas de Windows está cubierto en el estado de tamaño completo, por lo que se parece a la altura de la pantalla "real" se utiliza y no el altura de pantalla "disponible", que significa altura de pantalla menos la barra de herramientas/barra de tareas de Windows!

¿Alguien ha encontrado una solución a estos problemas?

Gracias

Respuesta

2

me resolvió el problema de esta manera:

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 

Funciona bastante bien.

+1

Gracias. Lo probaré. Un problema que veo con PrimaryScreenHeight es cuando se usa un segundo monitor, ¡pero debería ser bastante fácil de solucionar! Una nota; Dado que está utilizando Superior e Izquierda, ¿qué pasa con Inferior y Derecha? Se moverán aún más fuera de la pantalla? –

+0

Perfecto. Pero para mí, solo funciona si además de XAML publicaste aquí, también configuro WindowState = "Maximized" –

0

En Xaml establezca la continuación de la unión en el Window.MaxHeight:

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

No hay necesidad de una clase de utilidad adicional.

+6

¿Pero qué pasa si quiero usar mi aplicación en un segundo monitor? –

0

En mi caso, la etiqueta XAML de la ventana tenía la propiedad SizeToContent = "True" y todo lo que tenía que hacer era eliminarla.

3

me encontré con este gran solución

<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> 

Pero el error para mí aún persiste, las ventanas se ve compensado por unos pocos píxeles en la parte superior y la izquierda ... Traté de juego de izquierda y de arriba a 0 después de cambiar estado de la ventana pero nada pasa.

1

probar este

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