C# 搜索栏数字键盘自定义渲染器-Xamarin表单

C# 搜索栏数字键盘自定义渲染器-Xamarin表单,c#,xamarin,keyboard,xamarin.android,xamarin.forms,C#,Xamarin,Keyboard,Xamarin.android,Xamarin.forms,我正在尝试编写一个自定义渲染器,它允许我将“搜索栏”的键盘类型更改为数字 这是我的建议: [assembly: ExportRenderer(typeof(CustomSearchBar), typeof(SearchBarRenderer))] namespace App.Droid.CustomRenderers { class CustomSearchBarRenderer : SearchBarRenderer { protected override void OnElemen

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

这是我的建议:

[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,而不是设置显示键盘的实际键盘类型。不知道从这里到哪里去。任何帮助都将不胜感激

不确定为什么不调用渲染器,看起来您注册的不错,但是关于要更改键盘的部分,您正在修改元素,元素是具有来自表单部分的值的类,您要管理的是控件,什么是本机控件


另外,如果您想在更改键盘属性时反映所做的更改,则必须实现一个可绑定属性,并覆盖
OnElementPropertyChanged
函数。

不确定为什么不调用渲染器,似乎您注册了它,但关于更改键盘的部分,您正在修改元素,元素是具有来自表单部分的值的类,您想要管理的是控件,什么是本机控件


另外,如果您想在更改键盘属性时反映所做的更改,则必须实现一个可绑定属性,并覆盖
OnElementPropertyChanged
函数。

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

[assembly: ExportRenderer(typeof(CustomSearchBar), typeof(SearchBarRenderer))]
应该是

[assembly: ExportRenderer(typeof(CustomSearchBar), typeof(CustomSearchBarRenderer))]
下一步更改键盘类型。
在您的代码位中,您正在为
元素设置键盘,该元素是Xamarin表单元素。您要更改的是
控件
,它是本机控件

所以试试看:
对于android:

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
    base.OnElementChanged(e);
    this.Control.SetInputType(/*your keyboard type choice*/);
}
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
this.Control.SetInputType(/*您的键盘类型选择*/);
}
对于ios:

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
    base.OnElementChanged(e);
    this.Control.KeyboardType = /*your keyboard type choice*/;
}
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
this.Control.KeyboardType=/*您的键盘类型选择*/;
}

首先,我认为您的自定义渲染器注册不正确。可能是OnElementChanged方法未运行的原因

[assembly: ExportRenderer(typeof(CustomSearchBar), typeof(SearchBarRenderer))]
应该是

[assembly: ExportRenderer(typeof(CustomSearchBar), typeof(CustomSearchBarRenderer))]
下一步更改键盘类型。
在您的代码位中,您正在为
元素设置键盘,该元素是Xamarin表单元素。您要更改的是
控件
,它是本机控件

所以试试看:
对于android:

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
    base.OnElementChanged(e);
    this.Control.SetInputType(/*your keyboard type choice*/);
}
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
this.Control.SetInputType(/*您的键盘类型选择*/);
}
对于ios:

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
    base.OnElementChanged(e);
    this.Control.KeyboardType = /*your keyboard type choice*/;
}
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
this.Control.KeyboardType=/*您的键盘类型选择*/;
}