我有一个带有列表的Xamarin内容页面。对于ListItems,我想要类似于Android中的cardview。
基于我发现可以通过框架完成的内容。我有这段代码:
<ViewCell>
<StackLayout Padding="8" >
<controls:CardView HasShadow="True" OutlineColor="LightGray">
<StackLayout Orientation="Vertical" Padding="5">
// Some labels and Buttons
</StackLayout>
</Frame>
</StackLayout>
</ViewCell>
CardView具有以下代码:
public class CardView : Frame
{
public CardView()
{
Padding = 0;
if (Device.RuntimePlatform == Device.iOS)
{
HasShadow = false;
OutlineColor = Color.Transparent;
BackgroundColor = Color.Transparent;
}
}
}
这导致类似这样的事情:
这看起来更像是一个边界比这个卡悬浮效果。 上面的例子实际上使用相同的cardview控件,没有任何样式(即使没有OutlineColor)。我是否错过了我必须配置的选项?或者我怎样才能获得与样本相同的结果?
Xamarin.Forms版本:2.5.0.280555
答案 0 :(得分:2)
我已经实现了非常相似的东西(也是Frame
s作为要在堆栈视图中显示的卡片)。不幸的是,我不能分享确切的代码,因为它不是我拥有它,而是我的雇主,但我可以告诉你如何实现这一目标。
我已向ShadowRadius
添加了一个属性CardView
,并创建了一个源自Xamarin.Forms.Platform.Android.AppCompat.FrameRenderer
的自定义渲染器。在渲染器中,我设置了渲染器的Elevation
protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
{
/* ... */
this.Elevation = ((CardView)e.NewElement).ShadowRadius;
}
我的卡片在Xamarin.Forms 2.5.0.280555上显示出很好的高度阴影。
答案 1 :(得分:0)
你可以试试这个
<Frame HasShadow="True">
<controls:CardView OutlineColor="LightGray">
<StackLayout Orientation="Vertical" Padding="5">
// Some labels and Buttons
</StackLayout>
</controls:CardView>
</Frame>