入口圆角 - 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 中绘制圆角矩形?

Xamarin.iOS UITableViewCell ImageView 上的圆角

如何为 Xamarin.Forms 中的段控件设置圆角

Xamarin Forms:带圆角的 StackLayout

Xamarin Android 圆角边框与彩色 ImageView

csharp C# - Xamarin.Forms自定义简单徽章视图+通过自定义渲染器的圆角框视图