2016-05-11 4 views
0

私は、 'SearchBar'が数字であるようにキーボードタイプを変更できるカスタムレンダラーを作成しようとしています。ここでSearchBar数字キーボードカスタムレンダラー - 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イベントは決してヒットしませんが、たとえそうであったとしても、表示キーボードを設定する実際のKeyboardTypeではなく、カスタムキーボードプロパティをNumericに設定するだけです。ここからどこに行くのかわからない。どんな助けもありがとう。

答えて

0

なぜレンダラーが呼び出されていないのか分かりませんが、正しく登録したようですが、キーボードを変更する部分については、Elementを変更しています。要素はForms部分から来た値を持つクラスです。あなたが操作したいものは、ネイティブコントロールとは何ですか?

また、Keyboardプロパティを変更した場合に変更が反映されるようにするには、バインド可能なプロパティを実装してOnElementPropertyChanged関数をオーバーライドする必要があります。

2

まず、カスタムレンダラの登録が間違っていると思います。おそらく、なぜOnElementChanged方法は、キーボードの種類を変更する

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

次でなければなりません

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

を実行していません。
あなたのコードでは、Xamarin Formsの要素であるElementのキーボードを設定しています。あなたが変えたいのはネイティブコントロールであるControlです。アンドロイド用
:iOS用

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

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

だから、これを試してみます