如何在Xamrin.Form中的FrameRenders中使3角成圆角?

时间:2018-02-26 11:09:00

标签: c# listview xamarin.forms mvvm-light

我想将BottomLeft,TopRight,TopLeft转角设为圆角。我试过以下。但是,当文字大小更多时,它没有显示正确的设计。

我已将我的代码添加如下。

为了更好地理解,我添加了图片。

渲染代码

public class ExtendedFrameRenderer : FrameRenderer
{
    public override void Draw (CoreGraphics.CGRect rect)
    {
        base.Draw (rect);
        var elem = (ExtendedFrame)this.Element;
        UIRectCorner cornerstoRound = UIRectCorner.AllCorners;
        if (elem != null)
        {
            cornerstoRound = UIRectCorner.BottomLeft | UIRectCorner.TopRight | UIRectCorner.TopLeft;
        }

        var path = UIBezierPath.FromRoundedRect(rect, cornerstoRound, new CoreGraphics.CGSize(8, 8));
        var maskLayer = new CAShapeLayer();
        maskLayer.Path = path.CGPath;
        this.Layer.Mask = maskLayer;
    }
}

查看:

<Grid ColumnSpacing="2" Padding="5">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="15" />
    </Grid.ColumnDefinitions>

    <local:ExtendedFrame Grid.Column="1" OutlineColor="Transparent" HasShadow="False"
                         BackgroundColor="#30a5da">
        <StackLayout Spacing="0">
            <Label TextColor="White"
                   FontFamily="SourceSansPro-Regular"
                   FontSize="16"
                   Text="{Binding Text}" />
            <Label Grid.Row="1" Grid.Column="1"
                   FontSize="12" HorizontalTextAlignment="End"
                   Text="{Binding MessageDateTime, StringFormat='{0:hh:mm tt}'}"
                   TextColor="White" />
        </StackLayout>
    </local:ExtendedFrame>
</Grid>

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为这更简单。这是我的UWP插件。也许它会帮助你。查看customRender。Link

答案 1 :(得分:0)

我认为您可以在XF中执行此操作而不会覆盖FrameRenderer。这将使你塑造你想要的。如果你不覆盖渲染器,它应该更好地处理

内的内容
    <Grid Margin="10" HorizontalOptions="EndAndExpand">
            <Frame
                BackgroundColor="Red"
                CornerRadius="0"
                HeightRequest="50"
                HorizontalOptions="End"
                VerticalOptions="End"
                WidthRequest="20" />
            <Frame
                BackgroundColor="Blue"
                CornerRadius="10"
                HeightRequest="100">
                <StackLayout>
                    <Label
                        FontSize="17"
                        Text="long fake text text"
                        TextColor="White" />
                    <Label
                        FontSize="12"
                        HorizontalTextAlignment="End"
                        Text="05:30 AM"
                        TextColor="Yellow" />
                </StackLayout>
            </Frame>
        </Grid>

enter image description here