SearchBar数字键盘自定义渲染器 - Xamarin表单

时间:2016-05-11 21:44:25

标签: c# xamarin keyboard xamarin.android xamarin.forms

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

这是我的渲染器:

[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事件永远不会被命中,但即使它只是将自定义键盘属性设置为数字,而不是实际的KeyboardType来设置显示键盘。不知道从哪里开始。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:5)

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

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

应该是

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

接下来更改键盘类型。
在您的代码中,您正在为Element设置键盘,这是Xamarin Forms元素。您想要改变的是Control,它是本机控件。

所以试一试:
对于android:

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

for ios:

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

答案 1 :(得分:0)

不确定渲染器没有被调用的原因,似乎你注册了它,但是关于更改键盘的部分,你正在修改Element,Element是带有来自Forms部分的值的类,什么你想要操纵的是控制什么是原生控制。

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