搜索栏数字键盘自定义呈现器 - Xamarin 窗体



我正在尝试编写一个自定义渲染器,该渲染器将允许我将"搜索栏"的键盘类型更改为数字。

这是我的渲染器:

[assembly: ExportRenderer(typeof(CustomSearchBar), typeof(SearchBarRenderer))]
namespace App.Droid.CustomRenderers
{
class CustomSearchBarRenderer : SearchBarRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
    {
        base.OnElementChanged(e);
        var customSearchBar = (CustomSearchBar)Element;
        customSearchBar.keyboard = Keyboard.Numeric;
    }
}
}

然后是自定义控件:

public class CustomSearchBar : SearchBar
{
    public Keyboard keyboard { get; set; }
}

以及自定义控件的用法:

  var _mySearchBar = new CustomSearchBar();

不过我在这里有点不对劲。永远不会命中 OnElementChanged 事件,但即使是命中,也只会将自定义键盘属性设置为 Numeric,而不是实际的 KeyboardType 来设置显示键盘。不知道从这里开始。任何帮助将不胜感激。

首先,我认为自定义渲染器的注册不正确。 可能是为什么 OnElementChanged 方法没有运行

[assembly: ExportRenderer(typeof(CustomSearchBar), typeof(SearchBarRenderer))]

应该是

[assembly: ExportRenderer(typeof(CustomSearchBar), typeof(CustomSearchBarRenderer))]

旁边更改键盘类型。
在你的代码位中,你正在为Element设置键盘,即 Xamarin 窗体元素。您要更改的是本机控件Control

所以试一试:
对于安卓:

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
    base.OnElementChanged(e);
    this.Control.SetInputType(/*your keyboard type choice*/);
}

对于 iOS:

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
    base.OnElementChanged(e);
    this.Control.KeyboardType = /*your keyboard type choice*/;
}

不确定为什么不调用渲染器,似乎您注册正确,但是关于更改键盘的部分,您正在修改 Element,Element 是具有来自 Forms 部分的值的类,您要操作的是控制什么是本机控件。

此外,如果希望在更改 Keyboard 属性时反映所做的更改,则必须实现可绑定属性并重写 OnElementPropertyChanged 函数。

最新更新