Окно без полей занимает больше места, чем мое разрешение экрана - PullRequest
8 голосов
/ 19 января 2010

Я создал приложение без полей в WPF, и оно работает довольно хорошо. Однако, когда я устанавливаю WindowState на полный экран, приложение занимает больше места, чем мое разрешение экрана, поэтому за пределами экрана во всех направлениях появляются пиксели! (похоже, что некоторые жестко заданные отрицательные поля добавлены, чтобы скрыть границу по умолчанию)

Есть идеи, как этого избежать?

Мой xaml:

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

Кроме того, еще одна проблема, которую я видел, заключается в том, что панель инструментов / панель задач Windows покрыта в полноразмерном состоянии, поэтому похоже, что используется «фактическая» высота экрана, а не «доступная» высота экрана, то есть высота экрана минус Панель инструментов Windows / Панель задач!

Кто-нибудь нашел решение этих проблем?

Спасибо

Ответы [ 7 ]

3 голосов
/ 25 февраля 2013

Я нашел это отличное решение

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

Но ошибка для меня все еще сохраняется, окна смещены на несколько пикселей сверху и слева ... Я пытался установить Left и Top на 0 после изменения состояния окна, но ничего не происходит.

1 голос
/ 26 марта 2015

Попробуйте это

Width="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Width}"
Height="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Height}"
1 голос
/ 19 января 2010

Я решил проблему следующим образом:

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

Работает довольно хорошо.

0 голосов
/ 10 июля 2019

Мне нужно было это работать на дисплеях разных размеров (как и у большинства людей, это звучит). Так что я просто сделал это ...

<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 голосов
/ 02 мая 2018

Новая функция .NET решила эту проблему. Оставьте свой WindowStyle="SingleBorderWindow" или "ThreeDBorderWindow" Оставьте ResizeMode="CanResize", затем добавьте это к xaml внутри

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

Окно не будет иметь панели окна по умолчанию, но все равно позволит изменять размеры и не будет охватывать панель задач при максимизации.

0 голосов
/ 13 мая 2011

В моем случае тег XAML окна имел свойство SizeToContent = "True", и все, что мне нужно было сделать, это удалить его.

0 голосов
/ 02 сентября 2010

In Xaml установить следующую привязку на Window.MaxHeight:

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

Нет необходимости в дополнительном служебном классе.

...