public class CustomFrame: Frame
{
public static new readonly BindableProperty CornerRadiusProperty = BindableProperty.Create(nameof(CustomFrame), typeof(CornerRadius), typeof(CustomFrame));
public CustomFrame()
{
// MK Clearing default values (e.g. on iOS it's 5)
base.CornerRadius = 0;
}
public new CornerRadius CornerRadius
{
get => (CornerRadius)GetValue(CornerRadiusProperty);
set => SetValue(CornerRadiusProperty, value);
}
}
1.在Android中创建CustomFrameRender。
using FrameRenderer = Xamarin.Forms.Platform.Android.AppCompat.FrameRenderer;
[assembly: ExportRenderer(typeof(CustomFrame), typeof(CustomFrameRenderer))]
namespace Demo1.Droid
{
class CustomFrameRenderer : FrameRenderer
{
public CustomFrameRenderer(Context context)
: base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
{
base.OnElementChanged(e);
if (e.NewElement != null && Control != null)
{
UpdateCornerRadius();
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == nameof(CustomFrame.CornerRadius) ||
e.PropertyName == nameof(CustomFrame))
{
UpdateCornerRadius();
}
}
private void UpdateCornerRadius()
{
if (Control.Background is GradientDrawable backgroundGradient)
{
var cornerRadius = (Element as CustomFrame)?.CornerRadius;
if (!cornerRadius.HasValue)
{
return;
}
var topLeftCorner = Context.ToPixels(cornerRadius.Value.TopLeft);
var topRightCorner = Context.ToPixels(cornerRadius.Value.TopRight);
var bottomLeftCorner = Context.ToPixels(cornerRadius.Value.BottomLeft);
var bottomRightCorner = Context.ToPixels(cornerRadius.Value.BottomRight);
var cornerRadii = new[]
{
topLeftCorner,
topLeftCorner,
topRightCorner,
topRightCorner,
bottomRightCorner,
bottomRightCorner,
bottomLeftCorner,
bottomLeftCorner,
};
backgroundGradient.SetCornerRadii(cornerRadii);
}
}
}
}
6条答案
按热度按时间qlvxas9a1#
简单的方法是使用Nuget PancakeView。
可以在每个顶点中指定CornerRadius,以获得所需的效果:
示例:
您可以在official page.中了解更多信息
ukxgm1gy2#
另一种方法是对框架使用自定义渲染。
1.创建类名CustomFrame,继承Frame类,在PCL中添加BindableProperty CornerRadiusProperty
1.在Android中创建CustomFrameRender。
3.在表单中使用custonframe。
关于此的更多详细信息,请参考:
https://progrunning.net/customizing-corner-radius/
wgx48brx3#
使用核心包Xamarin.Forms.PancakeView.
请看下面类似问题的答案:
https://stackoverflow.com/a/59650125/5869384
sr4lhrrt4#
这适用于UWP渲染器
我已经使用的解决方案,从樱桃Bu - MSFT和改变它的UWP。在我的项目中,我使用它在Android,iOS和UWP,它是工作正常。
oyxsuwqo5#
我使用的一个简单的解决方案是在圆形框架后面设置另一个框架,就像这样
7bsow1i66#
您可以使用BoxView代替Frame
result view