Как отобразить страницу содержимого на половину размера экрана в Xamarin Forms? - PullRequest
0 голосов
/ 12 июля 2020

Я работаю над проектом Xamarin Forms, и мне нужно добиться следующего: при переходе с домашней страницы на новую страницу на новой странице будет кнопка меню, несколько текстовых полей и кнопка подписи. Когда мы нажимаем кнопку меню, страница меню должна скользить вниз. На странице слайд-меню должна быть панель навигации и возможность перехода к другим параметрам подменю.

Страница слайд-меню должна перекрывать текущую страницу содержимого. Есть ли способ добиться этого?

1 Ответ

0 голосов
/ 14 июля 2020

Слайд-меню будет зависеть только от того, какие пакеты вы хотите использовать, или от того, хотите ли вы создавать анимацию с помощью ResourceDictionary / VisualStateManager, но чтобы динамически уменьшить размер страницы вдвое, вы можете использовать что-то вроде:

XAML:

<Page x:Name="Page" HeightRequest="{Binding PageHeight, Mode=TwoWay}"></Page>
<Menu x:Name="Menu" HeightRequest="{Binding MenuHeight}"></Menu>

XAML.CS:

public class YourPage : YourType //(ContentViews for me)
private YourViewModel ViewModel => (YourViewModel)this.BindingContext;
public YourPage()
{
this.BindingContext = YourVM;
}

VM.CS:

public class YourViewModel : INotifyPropertyChanged
private double _pageHeight;
public double PageHeight
{
     set
     {
         if (_pageHeight != value)
         {
             _pageHeight = value;
             OnPropertyChanged("PageHeight");
             PageHeightChanged("PageHeight");
         }
     }
     get
     {
         return _pageHeight;
      }
}
private double _menuHeight;
public double MenuHeight
{
     set
     {
         if (_menuHeight != value)
         {
             _menuHeight = value;
             OnPropertyChanged("MenuHeight");
         }
     }
     get
     {
         return _menuHeight;
      }
}
private void PageHeightChanged()
{
    Menu.HeightRequest = Page.Height/2;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
...