【发布时间】:2017-07-04 08:05:19
【问题描述】:
我现在正在处理 Xamarin 表单。我需要有一个渐变堆栈布局视图,其堆栈布局的宽度设置为大于设备的纵向宽度。设置此宽度将确保堆栈布局适合纵向视图,而横向则可以看到具有宽度的堆栈布局。在这里,我需要一个从上到下的渐变堆栈布局。我已经看过一些带有用于堆栈布局的自定义渲染器的帖子,效果很好。
但是当我使用这些渲染器时,我可以看到在实时场景中将方向从纵向更改为横向时,绘制的渐变布局宽度被视为纵向宽度,其余区域为空。见附件图片
肖像
[![肖像][1]][1]
和风景
这里是 XAML 代码 imageenter image description here
<AbsoluteLayout>
<Image Source="img_bg.png" Aspect="AspectFill" VerticalOptions="FillAndExpand" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All"/>
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" Spacing="0" Padding="0,20,0,0">
<Image Source="img_logo.png" HorizontalOptions="Center" WidthRequest="200" HeightRequest="80"/>
<ScrollView>
<local:GradientStack StartColor="#99ddde" EndColor="#2896b1" HeightRequest="375" WidthRequest="300" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Padding="25,5,25,0" Margin="20,25,20,0" Spacing="0">
<Label Text="Log in" HorizontalOptions="Start" TextColor="#e5f8fc" FontSize="34"/>
<Label Text="Username" HorizontalOptions="Start" TextColor="#e5f8fc" FontSize="20" Margin="0,10,0,0"/>
<local:CustomBorderEntry x:Name="txtUserName" HorizontalOptions="FillAndExpand"
HeightRequest="38" Margin="0,5,0,0"
BackgroundColor="#e5f8fc" FontSize="16"
TextColor ="#201f1f"
HorizontalTextAlignment="Start" />
<Label Text="Password" HorizontalOptions="Start" TextColor="#e5f8fc" FontSize="20" Margin="0,10,0,0"/>
<local:CustomBorderEntry x:Name="txtPassword" HorizontalOptions="FillAndExpand"
HeightRequest="38" Margin="0,5,0,0"
BackgroundColor="#e5f8fc" FontSize="16"
TextColor ="#201f1f"
HorizontalTextAlignment="Start" IsPassword="true"/>
<Label Text="Event Code" HorizontalOptions="Start" TextColor="#e5f8fc" FontSize="20" Margin="0,10,0,0"/>
<local:CustomBorderEntry x:Name="txtEventCode" HorizontalOptions="FillAndExpand"
HeightRequest="36" Margin="0,5,0,0"
BackgroundColor="#e5f8fc" FontSize="16"
TextColor ="#201f1f"
HorizontalTextAlignment="Start"/>
<StackLayout Margin="0,20,0,0" Padding="0,1,0,0" BackgroundColor="#e5f8fc" HorizontalOptions="FillAndExpand" HeightRequest="45">
<local:GradientStack StartColor="#2c7f9d" EndColor="#0e5a8c" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" x:Name="slLogin">
<Label Text="Log in" FontSize="20" TextColor="#e5f8fc" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand"/>
</local:GradientStack>
</StackLayout>
</local:GradientStack>
</ScrollView>
</StackLayout>
自定义控件:
public class GradientStack : StackLayout
{
public Color StartColor { get; set; }
public Color EndColor { get; set; }
}
自定义渲染器:
public class GradientStackRenderer : VisualElementRenderer<GradientStack>
{
public override void Draw(CGRect rect)
{
base.Draw(rect);
CAGradientLayer layer = new CAGradientLayer();
layer.Frame = rect;
layer.Colors = new CGColor[] {
Element.StartColor.ToCGColor(),
Element.EndColor.ToCGColor()
};
Layer.InsertSublayer(layer, 0);
}
}
【问题讨论】:
-
你试过什么?我认为您可以为此使用
HorizontalOptions="CenterAndExpand"和Margin。 -
@DennisSchröer - 嗨丹尼斯,如果我使用的是普通的堆栈布局,它可以正常工作。在这里,我使用自定义渲染器来制作渐变堆栈布局。我从下面的链接stackoverflow.com/questions/28848545/… 得到了布局
-
你能展示你的 xaml 吗?
-
@YuriS 我已附加 XAML 代码图像
-
您可以编辑问题并粘贴代码吗?如果我想复制我需要做很多打字
标签: c# xaml xamarin.forms