Xamarin.Forms: 点击地图时隐藏ListView?
Xamarin.Forms: Hide ListView on Map click?
我的应用程序非常简单:它在上半部分显示一个 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
,并在底部显示 "Show List"。大致是这样的:
我在 class MainPage
中添加了一个事件处理程序(类似于 trouble in Hide/show of listview on a click in xamarin android),但它没有构建:
public MainPage()
{
InitializeComponent();
/* Fills ListView and plots points in map */
ListView_Pets.ItemClick += OnListItemClick;
}
步骤如下:
- 在 Views 的 stacklayout 中添加用于显示 "Show List" 的按钮或标签。
- 现在为地图、列表视图和按钮创建命令和属性以及
通过绑定从 ViewModel 处理。
- 当在地图上按下时,在ViewModel中调用自定义命令并写入
隐藏列表可见性的逻辑,根据高度调整大小
并显示按钮可见性。
- 当按下按钮时,调用点击自定义命令
ViewModel 并编写显示列表可见性的逻辑,
调整高度大小和隐藏按钮可见性。
我建议使用 <Grid>
而不是使用 <StackLayout>
来实现这种布局:
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 框架,则可以使用绑定更新显示隐藏逻辑。
我的应用程序非常简单:它在上半部分显示一个 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
,并在底部显示 "Show List"。大致是这样的:
我在 class MainPage
中添加了一个事件处理程序(类似于 trouble in Hide/show of listview on a click in xamarin android),但它没有构建:
public MainPage()
{
InitializeComponent();
/* Fills ListView and plots points in map */
ListView_Pets.ItemClick += OnListItemClick;
}
步骤如下:
- 在 Views 的 stacklayout 中添加用于显示 "Show List" 的按钮或标签。
- 现在为地图、列表视图和按钮创建命令和属性以及
通过绑定从 ViewModel 处理。 - 当在地图上按下时,在ViewModel中调用自定义命令并写入 隐藏列表可见性的逻辑,根据高度调整大小 并显示按钮可见性。
- 当按下按钮时,调用点击自定义命令 ViewModel 并编写显示列表可见性的逻辑, 调整高度大小和隐藏按钮可见性。
我建议使用 <Grid>
而不是使用 <StackLayout>
来实现这种布局:
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 框架,则可以使用绑定更新显示隐藏逻辑。