WPF Ориентация - PullRequest
       2

WPF Ориентация

6 голосов
/ 30 ноября 2011

Я разрабатываю приложение на планшете с книжной ориентацией.

Однако, когда планшет переходит в альбомный режим, приложение также поворачивается, и все выравнивания сбрасываются.Так можно ли как-нибудь заблокировать свое приложение WPF для одной ориентации?

Спасибо!

Ответы [ 4 ]

6 голосов
/ 30 ноября 2011

Я должен согласиться с Martin : я сам разработал приложения для планшетных ПК, и вам лучше предоставить макет, который хорошо работает в альбомной и портретной ориентациях.

Кроме того, вы можете обнаружить изменение ориентации следующим образом:

Microsoft.Win32.SystemEvents.DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySettingsChanged);
}

void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
  if (SystemParameters.PrimaryScreenWidth > SystemParameters.PrimaryScreenHeight)
  {
    // runs in landscape
  }
  else
  {
    // runs in portrait
  }
}
2 голосов
/ 23 октября 2014

Свен хорошо показывает, как обнаружить изменение ориентации ...

Однако, если вы не пишете приложение Metro (где вы можете установить предпочтительные ориентации в манифесте), нет никакого реального способа НЕ допустить изменения ориентации, однако, если вы заинтересованы только в разрешении Portrait, вы можете сделать что-то вроде это:

Просмотр модели:

Microsoft.Win32.SystemEvents.DisplaySettingsChanged += new           
    EventHandler(SystemEvents_DisplaySettingsChanged);
}

public bool IsLandscape { get; set; }

void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
  if (SystemParameters.PrimaryScreenWidth > SystemParameters.PrimaryScreenHeight)
  {
      IsLandscape = true;
  }
  else
  {
      IsLandscape = false;
  }

  RaisePropertyChanged( "IsLandscape" );
}

В тебе главное окно. Xaml:

<Border >
    <Border.Style>
        <Style TargetType="{x:Type Border}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsLandscape}" Value="True">
                    <Setter Property="LayoutTransform">
                        <Setter.Value>
                            <RotateTransform Angle="90"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
         </Style>
    </Border.Style>

///The rest of your controls and UI

</Border>

Таким образом, мы действительно не ограничиваем ориентацию, мы просто замечаем, когда это происходит, и поворачиваем наш пользовательский интерфейс, чтобы он по-прежнему выглядел как в портретном режиме :) Опять же, это в основном не для приложений Metro Win 8 и приложения, которые также работают на планшетах Win 7.

0 голосов
/ 07 января 2012

Я не знаю ни одного публичного API для блокировки ориентации экрана. Главным образом потому, что, как правило, производители планшетных ПК предоставляли свои собственные предустановленные утилиты или драйверы, которые использовали данные акселерометра для изменения ориентации. Это была не встроенная функция ОС. Это может измениться в Windows 8.

Хотя это не то же самое, что блокировка ориентации, вы можете попробовать реагировать на изменения ориентации, добавив преобразование поворота в LayoutTransform вашего корневого контейнера. Это изменит пространство макета так, что ваше приложение будет считать, что оно все еще повернуто на 90 градусов, но остальная часть ОС не согласится. Поэтому это действительно практично только для полноэкранных приложений.

0 голосов
/ 01 декабря 2011

Я сталкивался с той же проблемой при разработке приложения wpf для планшетов и нашел эту статью из msdn, объясняющую, как определять поворот и ориентацию экрана: http://msdn.microsoft.com/en-us/library/ms812142.aspx

...