2010-09-27 3 views
1

У меня есть окно WPF с набором MaxWidth, поэтому, когда я нажимаю кнопку Maximize, он максимизируется вертикально, но не горизонтально. Это ожидаемое поведение. Тем не менее, окно всегда подключается к левой стороне экрана (Windows 7, если это имеет значение), и я хочу, чтобы он был центрирован по горизонтали, когда был Максимизирован. Я попытался добавить обработчик событий следующего StateChanged, но это, кажется, не делать ничего:горизонтально центр вертикально максимизированного окна WPF

private void wdw_mainWindow_StateChanged(object sender, EventArgs e) 
{ 
    switch (WindowState) 
    { 
     case WindowState.Maximized: 
      var windowWidth = (double)GetValue(WidthProperty); 
      Left = (SystemParameters.PrimaryScreenWidth/2) - (windowWidth/2); 
      break; 
    } 
} 

я поставил точку останова на switch заявлении и этот код определенно получает удар, когда я нажал на кнопку Maximize в моем приложении. Однако даже после установки Left окно остается прочно застрявшим в левой части экрана. Что происходит?

ответ

0

Изменить WindowWidth вызов (который возвратит NaN) к:

var windowWidth = this.ActualWidth; 

Примечание: это был протестирован на XP SP3 - У меня нет машины Win7 доступной для меня здесь в данный момент.

Извините - имеет такое же поведение, как и Win7 при максимальном использовании WindowState. Возможно, лучше всего поймать, когда WindowState будет изменено на Maximized, и вместо фактического установки WindowState установите размер и положение окна в нормальном режиме.

0

Регистрироваться также, чтобы изменить местоположение, и когда происходят оба события exec, логика, это сделает трюк.

+0

Хм, это заставляет меня беспокоиться о том, что если пользователь должен был изменить местоположение, мое приложение будет спорить с ними и поп-обратно в другое место. –

+0

Итак, запишите два события, например, в Rx.net. –

Смежные вопросы