【问题标题】:Is it possible to change the border of a single Entry in xamarin forms?是否可以更改 xamarin 表单中单个条目的边框?
【发布时间】:2017-05-02 07:44:18
【问题描述】:

我想知道是否有人可以指出我如何更改单个条目?我制作了一个自定义渲染器,它将条目的边框更改为红色,但我真正想要的只是在验证失败时将一个条目从黑色变为红色。

参赛作品图片:

我的渲染器:

[assembly: ExportRenderer(typeof(App.RedFrameEntry), typeof(RedFrameEntryRenderer))]
namespace App.iOS
{
    public class RedFrameEntryRenderer : EntryRenderer
    {

        public bool isInvalid = false;

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.BorderStyle = UITextBorderStyle.RoundedRect;
                Control.Layer.CornerRadius = 4;
                Control.Layer.BorderColor = Color.FromHex("#c60303").ToCGColor();
                Control.Layer.BorderWidth = 0;
                if (isInvalid)
                {
                    Control.Layer.BorderWidth = 2;
                }
            }
        }
        protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
        }
    }
}

还有我的代码:

private void ChangeEntryOnValidationFail(string text, Entry entry, int numberOfChar)
{
    if (String.IsNullOrEmpty(text) || text.Length < numberOfChar)
    {
        // TODO: Change to RedFrameEntry
    }
    else
    {
        // TODO: Change back to default
    }
}

【问题讨论】:

  • 请不要将代码发布为图像。您应该始终在问题中发布代码。

标签: xamarin.forms


【解决方案1】:

我建议你创建一个CustomEntry 类,它的基类为Entry,因此无需更改所有条目的边框,只需在需要时调用CustomEntry

public class CustomEntry : Entry{
}

然后使用:

[assembly: ExportRenderer(typeof(CustomEntry), typeof(RedFrameEntryRenderer))]

希望对你有帮助!

【讨论】:

  • 您好,感谢您的回答。我遇到的问题是,我不确定如何在我正在执行验证的 xaml.cs 中调用 CustomEntry。
  • 检查 CustomEntry 类的命名空间,然后使用它调用 XAML 上的命名空间。前任。 xmlns:custom="clr-namespace:TheNamespace;assembly=TheAssembly(notreallyneeded)" 然后这样称呼它&lt;custom:CustomEntry/&gt;
  • 有什么方法可以将现有条目(普通条目)更改为 xaml.cs 中的 CustomEntry?
  • 我不太确定。你试过这样做吗? yourEntry = new CustomEntry(){ ...properties...};
  • 是的,但它对我不起作用。我想我会以丑陋的方式实现这个(隐藏和显示条目),直到找到更好的解决方案。非常感谢!
猜你喜欢
  • 2016-11-07
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 2016-08-28
  • 2019-04-05
  • 2017-05-04
相关资源
最近更新 更多