2015-10-07 1 views
2

В моем проекте используется .NET 4.0, у меня есть приложение WPF и 2 монитора с разрешением 1600 X 900 и 1920 X 1080. Вначале Я ожидаю полосу прокрутки из-за низкого разрешения, когда я переношу приложение на монитор разрешения HD и максимизирую его, появляется полоса прокрутки для оси X и Y.WPF: на экранах с разным разрешением полоса прокрутки появляется даже при максимальном состоянии окна

Если оба экрана имеют одинаковое разрешение 1920 X 1080, тогда все работает отлично, ни одна полоса прокрутки не появляется.

Сниппет для максимального увеличения:

if (screen != null) 
{ 
    window.WindowState = System.Windows.WindowState.Normal; 
    window.Left = screen.WorkingArea.Left; 
    window.Top = screen.WorkingArea.Top; 
    window.WindowState = System.Windows.WindowState.Maximized; 
    window.Height = screen.WorkingArea.Height; 
    window.Width = screen.WorkingArea.Width; 
} 

Я знаю, что в 4.5, я могу использовать SystemCommands, чтобы максимизировать. Но я не знаю, как решить эту проблему в 4.0. Я хочу знать, даже если состояние окна максимизировано, почему пока отображается полоса прокрутки?

+0

Вы спрашиваете о полосах прокрутки или изменении размера окна. Если вы действительно спрашиваете о полосах прокрутки, можете ли вы отправить код для них? –

+0

с запросом на изменение размера окна до максимума, но полоса прокрутки автоматически включает 2 разных монитора разрешения. В одном мониторе разрешения это не проблема, как упоминалось в вопросе. – MKMohanty

ответ

1

Я нашел решение, проверив свойство окна компонента, как-то в режиме изменения размера сброса свойств для различного разрешения монитора. Возможно, он запоминает режим изменения размера более низкого разрешения, даже если он открыт на мониторе с высоким разрешением. Итак, ниже код исправил мою проблему.

if (screen != null) 
{ 
    window.WindowState = System.Windows.WindowState.Normal; 
    window.Left = screen.WorkingArea.Left; 
    window.Top = screen.WorkingArea.Top; 
    window.ResizeMode = ResizeMode.NoResize; 
    window.WindowStyle = WindowStyle.None; 
    window.WindowState = System.Windows.WindowState.Maximized; 
    window.Height = screen.WorkingArea.Height; 
    window.Width = screen.WorkingArea.Width; 
} 

Я надеюсь, что это поможет другим, кто может застрять здесь.

+0

что такое экран в коде ??? вы можете мне сказать, пожалуйста? – praveen

+0

@praveen это System.Windows.Forms.Screen. Вы можете получить, например, первичный экран ur, например, var primaryScreen = System.Windows.Forms.Screen.AllScreens.FirstOrDefault (s => s.Primary); – MKMohanty

+0

Я пробовал это, но не работал для меня .. Я использовал пользовательскую полосу прокрутки по этой ссылке https://codeoverload.wordpress.com/2011/11/26/custom-scrollbars-in-wpf/ – praveen

0

Приложения WPF обычно не зависят от вашего разрешения. Если вы хотите, чтобы окно максимизируется только использовать это:

window.WindowState = System.Windows.WindowState.Maximized; 
+0

Я знаю его независимо от разрешения, но по какой-то странной причине его не работает. Как вы уже видите, я уже пробовал этот код. :) – MKMohanty

0

Возможно, возникла другая проблема. В противном случае нет необходимости устанавливать WindowState дважды. Может быть, время для установки этих элементов не в порядке. У меня была попытка "Window_Loaded" без успеха. Теперь я делаю материал в конструкторе окна, все в порядке!

+0

«Не делаю ничего»: вы имели в виду «Теперь я делаю вещи»? –

+0

Да, я исправил его, спасибо! – tiands