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=/*您的键盘类型选择*/;
}