我使用Xamarin.Forms
,我有Image
。我想与Corner Radius
和Border Width
对接。我可以做吗 ?我尝试使用Frame
。这很好,但它只有Border Width
= 1,我不能改变这一点。我知道Effect
,但我不想使用它们。我可以做它例如使用矩形或任何方式?Xamarin.Forms框架边框宽度
2
A
回答
2
您可以使用效果创建自己的实现,也可以扩展FreshEssentials开放源代码库。他们有一个名为AdvancedFrame的控件,它为所有平台上的Frame控件提供自定义渲染器。
如果您查看每个特定于平台的项目,您会注意到AdvancedFrameRenderer
类为创建圆角支持创建了更加复杂的路径。你只需要深入到每个平台上的Draw
方法(iOS,Android),并找出如何设置笔触宽度。
从Android开始,最简单的方法是在代码中定义笔画宽度(on this line)。您只需要在AdvancedFrame控件中为该属性创建一个属性,以便每个控件都可以有不同的宽度。我不知道如何在iOS上设置笔触宽度,但它使用UIBezierPath,它应该很容易修改。
1
你可以尝试这样的事情:
<Frame HasShadow="False" CornerRadius="25" Padding="2" BackgroundColor="#F69927">
<Frame HasShadow="False" CornerRadius="23" BackgroundColor="White" Padding="12">
<StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand" VerticalOptions="Start">
<!-- Content -->
</StackLayout>
</Frame>
</Frame>
0
我试着用FrameRenderer跳舞Android和我找到了一些解决方案。 不好的一面是,要成为MyFrameRenderer类中可见的边框颜色,宽度和角半径变量,我必须创建MyFrame:Frame类来仅影响我自己的框架类型。关闭够我的目的......所以:
namespace PROJECT
{
public class MyFrame : Xamarin.Forms.Frame
{
public static float myFrameWidth = 2;
public static float myCornerRadius = 12;
public static Color myFrameColor = Color.Red;
public static Color myBackgroundColor = Color.Black;
public MyFrame() { }
}
}
...
[assembly: ExportRenderer(typeof(PROJECT.MyFrame), typeof(PROJECT.Droid.MyFrameRenderer))]
namespace PROJECT.Droid
{
class MyFrameRenderer : FrameRenderer
{
protected override void OnDraw(Android.Graphics.Canvas canvas)
{
// canvas contains image of standard outline
// to "hide" it, not efficent but sometimes "close enough solution"
// is to overlay that outline by new one in our's page background color
// then draw a new one in prefered style
// or... just draw thicker one over the old
var my1stPaint = new Android.Graphics.Paint();
var my2ndPaint = new Android.Graphics.Paint();
var backgroundPaint = new Android.Graphics.Paint();
my1stPaint.AntiAlias = true;
my1stPaint.SetStyle(Paint.Style.Stroke);
my1stPaint.StrokeWidth = MyFrame.myFrameWidth + 2;
my1stPaint.Color = MyFrame.myFrameColor.ToAndroid();
my2ndPaint.AntiAlias = true;
my2ndPaint.SetStyle(Paint.Style.Stroke);
my2ndPaint.StrokeWidth = MyFrame.myFrameWidth;
my2ndPaint.Color = MyFrame.myBackgroundColor.ToAndroid();
backgroundPaint.SetStyle(Paint.Style.Stroke);
backgroundPaint.StrokeWidth = 4;
backgroundPaint.Color = MyFrame.myBackgroundColor.ToAndroid();
Rect oldBounds = new Rect();
canvas.GetClipBounds(oldBounds);
RectF oldOutlineBounds = new RectF();
oldOutlineBounds.Set(oldBounds);
RectF myOutlineBounds = new RectF();
myOutlineBounds.Set(oldBounds);
myOutlineBounds.Top += (int)my2ndPaint.StrokeWidth+3;
myOutlineBounds.Bottom -= (int)my2ndPaint.StrokeWidth+3;
myOutlineBounds.Left += (int)my2ndPaint.StrokeWidth+3;
myOutlineBounds.Right -= (int)my2ndPaint.StrokeWidth+3;
canvas.DrawRoundRect(oldOutlineBounds, 10, 10, backgroundPaint); //to "hide" old outline
canvas.DrawRoundRect(myOutlineBounds, MyFrame.myCornerRadius, MyFrame.myCornerRadius, my1stPaint);
canvas.DrawRoundRect(myOutlineBounds, MyFrame.myCornerRadius, MyFrame.myCornerRadius, my2ndPaint);
base.OnDraw(canvas);
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Frame> e)
{
base.OnElementChanged(e);
}
}
}
相关问题
- 1. matplotlib边框宽度
- 2. 部分宽度边框
- 3. 减少边框的宽度
- 4. CSS无边框宽度
- 5. Xamarin.Forms Marquee iOS框架
- 6. 窗口边框的宽度和高度
- 7. 定义边框宽度(不是厚度)
- 8. CSS边框宽度:1px不会给我同样薄的边框
- 9. 框架集边框地狱框架集
- 10. 百分比边框的宽度
- 11. CSS:设置边框宽度的一半
- 12. 更改边框宽度由XAML中,`wpf`
- 13. 的Java:调整边框的宽度
- 14. 嵌套iText PdfPTable的边框宽度
- 15. 圆形边框宽度百分比?
- 16. 带边框的ul百分比宽度
- 17. 边框和填充宽度javascript
- 18. “模拟” 上COLGROUP边框宽度与IE7
- 19. 使UISwitch边框宽度变小
- 20. 像素边框和百分比宽度
- 21. Bootstrap - 盒子边框塌陷宽度
- 22. Safari 9.1.3边框宽度问题
- 23. 在悬停时更改边框宽度
- 24. 动画边框控件的宽度
- 25. HTML行边框全表宽度
- 26. 框架边框颜色
- 27. ListViewItem边框 - 精简框架
- 28. 在块元素中限制边框宽度为文本宽度
- 29. CSS框架的宽度为972px?
- 30. 选择宽度实体框架和LINQ
是否有一个具体的理由,为什么你不希望使用效果如何?设置Frame的边框宽度的问题对他们来说变得相当微不足道。 – hankide
我以为有没有效果的方式,只有PCL。如果没有这种方法,我会做'效果' –