我正在尝试实现一种可折叠的StackLayout . 用户单击按钮的每个时间点,它会展开或折叠stacklayout以显示/隐藏更多详细信息 .
我能够通过下面的代码实现更多/更少的这个,但它看起来不正确并且效果不是很好,因为它会立即增长并且我将效果应用于其他元素 .
你对此有什么建议,我使用的是xamarin Forms吗?
XAML
<?xml version="1.0" encoding="utf-8" ?>
<StackLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Sample.MyStackLayout" >
<StackLayout x:Name="TopLayout">
<StackLayout Orientation="Horizontal">
<Label Text="some text" VerticalOptions="Center" HorizontalOptions="StartAndExpand" />
<Label Text="123" VerticalOptions="Center" HorizontalOptions="End" FontSize="Large" />
</StackLayout>
<BoxView Color="Black" HeightRequest="1" />
<StackLayout Orientation="Horizontal">
<Label Text="some text" VerticalOptions="Center" HorizontalOptions="StartAndExpand" />
<Label Text="123" VerticalOptions="Center" HorizontalOptions="End" FontSize="Large" />
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="some text" VerticalOptions="Center" HorizontalOptions="StartAndExpand" />
<Label Text="123" VerticalOptions="Center" HorizontalOptions="End" FontSize="Large" />
</StackLayout>
<Button x:Name="btn" Text="Button" Clicked="btnClicked" />
</StackLayout>
<StackLayout x:Name="MoreDetails" IsVisible="False">
<Label Text="some text 1"></Label>
<Label Text="some text 2"></Label>
<Label Text="some text 3"></Label>
<Label Text="some text 4"></Label>
<Label Text="some text 5"></Label>
<Label Text="some text 6"></Label>
<Label Text="some text 7"></Label>
<Label Text="some text 8"></Label>
</StackLayout>
</StackLayout>
Code
public AccountInfo()
{
InitializeComponent();
}
bool isExpanded = false;
protected async void btnClicked(object sender, EventArgs e)
{
if (isExpanded)
{
await MoreDetails.FadeTo(0);
MoreDetails.IsVisible = !isExpanded;
}
else
{
MoreDetails.IsVisible = !isExpanded;
await MoreDetails.FadeTo(1);
}
isExpanded = !isExpanded;
}
2 回答
您可以创建一个自定义控件来执行此操作 . 如果您使用Xaml创建“ExpandableView”内容视图,例如:
并像这样连接.cs类:
并在你的xaml中定义它,如下所示:
其中CustomControls是对ExpandableView存在的命名空间的引用 .
您可以通过在展开时添加动画等内容来进一步扩展,在展开时突出显示“摘要区域”等...
将您的所有内容包装到MoreDetails到另一个堆栈布局并将其命名为“TopLayout”
100 - 这是你的位移值
作为奖励:
您可以像这样变形按钮来为ShowMore / ShowLess图像设置动画