WPF - неправильное разрешение окна после программной установки Window.Windowstate в развернутое

Поэтому я пытаюсь открыть развернутое окно на своем дополнительном мониторе. Все работает нормально, за исключением того, что высота на 2 пикселя ниже, чем должна быть.

Мой дополнительный монитор имеет разрешение 1280x1024. Однако, как только я осматриваю окно, оно 1280x1022. Кто-нибудь знает проблему?

ОС: Виндовс 10

Фактическая высота/ширина изображения (Puush)

Вот код:

SecondaryMonitorWindow smw = new SecondaryMonitorWindow();
smw.Show();

XAML

Loaded="OnWindowLoaded"
WindowStartupLocation="Manual"
WindowStyle="None"
SnapsToDevicePixels="True"
Height="1280" 
Width="1024"

Конструктор

public SecondaryMonitorWindow()
{
    InitializeComponent();
    Instance = this;
}

Событие

private void OnWindowLoaded(object sender, RoutedEventArgs e)
{
    this.MaximizeToSecondaryMonitor();
}

Метод расширения

public static void MaximizeToSecondaryMonitor(this Window window)
{
    var secondaryScreen = Windows.Forms.Screen.AllScreens.Where(s => !s.Primary).FirstOrDefault();

    if (secondaryScreen != null)
    {
        if (!window.IsLoaded)
            window.WindowStartupLocation = WindowStartupLocation.Manual;

        window.Left = secondaryScreen.WorkingArea.Left;
        window.Top = secondaryScreen.WorkingArea.Top;
        window.Width = secondaryScreen.WorkingArea.Width;
        window.Height = secondaryScreen.WorkingArea.Height;

        if (window.IsLoaded)
            window.WindowState = WindowState.Maximized;
    }
}

person CareX    schedule 09.05.2016    source источник
comment
какую ОС вы используете?   -  person Kylo Ren    schedule 09.05.2016
comment
@KyloRen Добавил это в описание, но я использую атм. Windows 10.   -  person CareX    schedule 09.05.2016
comment
это помогло? или все еще не получаете желаемого результата?   -  person Kylo Ren    schedule 10.05.2016
comment
@KyloRen В вашем сообщении со ссылкой они сказали, что как только он разрешил прозрачность, это сработало. Поэтому я добавил это в XAML, и тогда все заработало. Я также добавил 'window.WindowState = WindowState.Normal;' в методе расширения. Чтобы убедиться, что в XAML он не настроен на максимизацию (что по-прежнему будет принудительно открывать его на основном мониторе). Однако, когда я применил ваше исходное исправление, оно все равно рассчитало высоту с отставанием в 2 пикселя. Но в каком-то смысле ты мне все равно помог! Спасибо!   -  person CareX    schedule 10.05.2016
comment
но у вас все в порядке с Window.Style = none?   -  person Kylo Ren    schedule 10.05.2016
comment
@KyloRen Мой WindowStyle установлен на None, да. Но я имел в виду WindowState. (Развернуто/Свернуто/Нормально)   -  person CareX    schedule 10.05.2016
comment
Я скептически отношусь к результатам с указанными настройками, но если вы говорите, то, вероятно, вы этого добились.   -  person Kylo Ren    schedule 10.05.2016


Ответы (1)


Попробуйте задать параметр грамматически, только так вы сможете добиться идеального размера:

 public MainWindow()
    {            
        InitializeComponent();
        this.Height = SystemParameters.WorkArea.Height;
        this.Width = SystemParameters.WorkArea.Width;
    }

однако есть ошибки вокруг Window 10. если вы используете, пожалуйста, дайте мне знать, я обновлю ответ.

Для окна 10 это сообщение будет помощь. в окне 10 нет дизайна Border, поэтому есть проблема с пикселями. Я не уверен, что такое Window настройки оформления в вашей ОС, но попробуйте это.

this.Height = SystemParameters.WorkArea.Height +  SystemParameters.FixedFrameHorizontalBorderHeight;
this.Width = SystemParameters.WorkArea.Width + SystemParameters.FixedFrameVerticalBorderWidth;

Если были удалены некоторые другие границы, попробуйте также добавить размер границы ResizeFrame.

person Kylo Ren    schedule 09.05.2016