Окно.Top считывает разные результаты в .NET 4 до .NET 3.5

#.net #wpf #.net-4.0

#.net #wpf #.net-4.0

Вопрос:

У нас есть проект WPF, разработанный с .NET 3.5, который мы преобразовали в .NET 4, чтобы воспользоваться новыми функциями, но наше главное окно top и left свойства получают другие результаты, чем в .NET 3.5

В 3.5: top считывает -7, в 4.0: считывает 0 (при запуске приложения)

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

 (this as Window).WindowState = System.Windows.WindowState.Normal;
(this as Window).WindowState = System.Windows.WindowState.Maximized;
  

Ответ №1:

Ну, я полагаю, вы имеете в виду развернутое окно. Если вы развернете окно, граница будет находиться за пределами обычных границ экрана и, следовательно, вверху и слева будут отрицательные значения. Возможно, .NET 4 изменил это значение на ноль, даже если оно максимизировано, в то время как .NET 3.5 этого не делает.

— SeriTools

Комментарии:

1. как я уже говорил, после того, как мы выполним код: (это как окно). WindowState = System. Windows. WindowState. Нормально; (это как окно). WindowState = System. Windows. WindowState.Maximized; окно будет развернуто, а затем top снова считывает -7, как это было в .NET 3.5 если вы правы, то он будет продолжать считывать ноль даже после выполнения приведенного выше кода!

2. Что ж, тогда я рекомендую вам использовать WinAPI для получения этих значений. Он всегда будет возвращать толщину границы (в данном случае -7) в случае развернутых окон. 😉