2015-08-25 3 views
1

Я хотел бы изменить размер элемента управления в Xamarin.Forms с некоторым событием в коде за элементом управления.Xamarin.Forms - изменить размер элемента управления в коде за

В частности, я хотел бы изменить размер StackLayout при изменении ориентации устройства.

В настоящем время, я делал это так (но это не работает):

private void SettingsPage_OnSizeChanged(object sender, EventArgs e) 
{ 
    var isPortrait = UIHelpers.IsPortrait(this); 
    if (isPortrait) 
     RemoteServerSL.WidthRequest = RemoteServerSL.ParentView.Width; 
    else 
    { 
     RemoteServerSL.WidthRequest = RemoteServerSL.ParentView.Width/2; 
    } 

    this.UpdateChildrenLayout(); 
    this.ForceLayout(); 
    RemoteServerSL.ForceLayout(); 

} 

Цель состоит в том, чтобы изменить ширину моего StackLayout к parentWidth, если я нахожусь в ландшафтном режиме.

Как я могу справиться с этим?

BTW.Я сейчас работаю над Android.

ответ

0

Вы должны использовать переопределение метода OnSizeAllocated для определения изменения ориентации;

double previousWidth; 
double previousHeight; 

    protected override void OnSizeAllocated(double width, double height) 
    { 
     base.OnSizeAllocated(width, height); 

     if (previousWidth != width || previousHeight != height) 
     { 
      previousWidth = width; 
      previousHeight = height; 

      if (width > height) 
      { 
       // landscape mode 
      } 
      else 
      { 
       // portrait mode 
      } 
     } 
    } 
+0

Он отлично работает на макете страницы. У вас есть идея, почему он не работает, например, пользовательский StackLayout? – Tomasz

+0

Можете ли вы дать некоторые сведения о том, что такое «custom StackLayout»? –

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