入口圆角 - Xamarin 形成 UWP
Posted
技术标签:
【中文标题】入口圆角 - Xamarin 形成 UWP【英文标题】:Rounded corner for Entry - Xamarin forms UWP 【发布时间】:2019-03-29 01:40:17 【问题描述】:有没有什么办法可以自定义入口的半径以使其具有略圆的角?
【问题讨论】:
forums.xamarin.com/discussion/18056/… 【参考方案1】:您可以在 xamarin.forms 中使用 Custom Renderer
在 ios 中
//...
using App11;
using App11.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(MyEntry), typeof(MyiOSEntry))]
namespace App11.iOS
public class MyiOSEntry:EntryRenderer
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
base.OnElementChanged(e);
if (Control != null)
Control.Layer.MasksToBounds = true;
Control.Layer.CornerRadius = 10; //set the rounded corner
Control.Layer.BorderColor = UIColor.Red.CGColor;
Control.Layer.BorderWidth = 3;
在安卓中
在Resource->drawable文件夹中创建一个xml文件edit_text_style.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="rectangle">
<solid
android:color="#ffffff" />
<corners
android:radius="10dp" />
<stroke
android:
android:color="#3bbdfa" />
</shape>
</item>
在Custom Renderer
using Android.Support.V4.Content.Res;
using App11;
using App11.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(MyEntry), typeof(MyAndriodEntry))]
namespace App11.Droid
public class MyAndriodEntry:EntryRenderer
public MyAndriodEntry(Context context):base(context)
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
base.OnElementChanged(e);
if(Control!=null)
Control.SetBackground(ResourcesCompat.GetDrawable(Resources, Resource.Drawable.edit_text_style, null) );
在 UWP 中
创建一个名为 Styles 的文件夹,并将一个新项目添加为 Resource Dictionary 类型并将其命名为 Dictionary1.xaml 在 Dictionary1.xaml 中将此代码用于圆形文本框。
在Custom Renderer
using App11;
using App11.UWP;
using Windows.UI.Xaml.Controls;
using Xamarin.Forms;
using Xamarin.Forms.Platform.UWP;
[assembly: ExportRenderer(typeof(MyEntry), typeof(MyUWPEntry))]
namespace App11.UWP
public class MyUWPEntry:EntryRenderer
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
base.OnElementChanged(e);
if(Control!=null)
Control.Style = (Windows.UI.Xaml.Style)App11.UWP.App.Current.Resources["StyleRoundedTextBox"];
如何更改此样式以及如何创建此代码? 很简单,在 msdn.com 中搜索 uwp 中的“objectName”默认样式,然后您将找到所需对象的默认样式。以您想要的方式更改它并将其直接添加到应用程序资源或链接它(就像我在这里所做的那样)然后在 CustomRenderer 中加载您的样式
关于UWP的更多细节你可以参考here
在表单中
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;
namespace App11
public class MyEntry : Entry
public MyEntry()
在 xxx.cs 文件中
Content = new StackLayout
Children =
new MyEntry Text = "In Shared Code",
,
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
;
【讨论】:
【参考方案2】:对于 Windows 应用,您可以使用渲染器自定义条目。
public class CustomEntryRenderer : ViewRenderer<CustomEntry, TextBox>
protected override void OnElementChanged(ElementChangedEventArgs<CustomEntry> e)
base.OnElementChanged(e);
var textBox = new TextBox();
textBox.BorderThickness = new Windows.UI.Xaml.Thickness(1);
textBox.BorderBrush = new SolidColorBrush(GetSolidColorBrush("#444444").Color);
textBox.CornerRadius = new Windows.UI.Xaml.CornerRadius(10);
this.SetNativeControl(textBox);
public SolidColorBrush GetSolidColorBrush(string hex)
hex = hex.Replace("#", string.Empty);
byte r = (byte)(Convert.ToUInt32(hex.Substring(0, 2), 16));
byte g = (byte)(Convert.ToUInt32(hex.Substring(2, 2), 16));
byte b = (byte)(Convert.ToUInt32(hex.Substring(4, 2), 16));
SolidColorBrush myBrush = new SolidColorBrush(Windows.UI.Color.FromArgb(255, r, g, b));
return myBrush;
【讨论】:
【参考方案3】:天哪,没那么难。
除非我遗漏了什么,否则只需将其包裹在 Frame
中,并将 IsClippedToBounds
设置为 true,然后在框架上放置一个圆角半径。
我猜也许有某种原因这不是一个好的解决方案,但我经常使用它。
【讨论】:
以上是关于入口圆角 - Xamarin 形成 UWP的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.iOS UITableViewCell ImageView 上的圆角
Xamarin Forms:带圆角的 StackLayout