Xamarin.Forms: скрыть ListView на карте?

Мое приложение действительно простое: оно отображает Xamarin.Forms.Map в верхней половине и ListView в нижней половине.

Это мой xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
             xmlns:local="clr-namespace:GasStations"
             x:Class="GasStations.MainPage">

    <StackLayout>
        <StackLayout VerticalOptions="FillAndExpand">
            <maps:Map WidthRequest="960" HeightRequest="200"
            x:Name="MyMap"
            IsShowingUser="true"/>
            <ListView x:Name="ListView_Pets">
            </ListView>
        </StackLayout>
    </StackLayout>

</ContentPage>

Это приложение в эмуляторе:

введите описание изображения здесь

Я хотел бы скрыть ListView, когда я нажимаю на карте, и внизу что-то с надписью «Показать список». Примерно так:

введите описание изображения здесь

Я добавил подобный обработчик событий в класс MainPage (аналогично проблема с скрытием / отображением списка при щелчке мыши в xamarin android), но он не строит:

public MainPage()
{
    InitializeComponent();
    /* Fills ListView and plots points in map */
    ListView_Pets.ItemClick += OnListItemClick;
}

person fdkgfosfskjdlsjdlkfsf    schedule 13.02.2019    source источник


Ответы (2)


Вместо использования <StackLayout> я бы предложил использовать <Grid> для достижения такого рода макета:

Код Xaml:

<Grid RowSpacing="0">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="50" />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <StackLayout Grid.Row="0">
        <maps:Map WidthRequest="960" HeightRequest="200" 
                  x:Name="MyMap" IsShowingUser="true"/>
    </StackLayout>
    <StackLayout Grid.Row="1">
        <Label Text="Show List" TextColor="LightGray">
            <Label.GestureRecognizers>
                <TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"/>
            </Label.GestureRecognizers>
        </Label>
    </StackLayout>
    <StackLayout Grid.Row="2" x:Name="listSection" IsVisible="false" HeightRequest="200">
        <ListView x:Name="ListView_Pets"/>
    </StackLayout>
</Grid>

Отложенный код:

private bool isListVisible;
void OnTapGestureRecognizerTapped(object sender, EventArgs args)
 {
    isListVisible = !isListVisible;
    listSection.IsVisible = !isListVisible;
 }

Вы можете обновить логику скрытия показа с помощью привязки, если вы используете MVVM Framework.

person Himanshu Dwivedi    schedule 13.02.2019

Следующие шаги:

  • Добавить кнопку или метку для отображения «Показать список» внутри стека в представлениях.
  • Теперь создайте команду и свойство для карты, списка и кнопки и дескриптора
    из ViewModel путем привязки.
  • При нажатии на карту вызовите пользовательскую команду в ViewModel и напишите логику для скрытия видимости списка, настройки размера по высоте и отображения видимости кнопок.
  • При нажатии кнопки вызовите пользовательскую команду щелчка в ViewModel и напишите логику для отображения видимости списка, настройки размера по высоте и скрытия видимости кнопки.
person Mridul Malviya    schedule 13.02.2019