2017-09-08 13 views
0

私はxamarin.formsアプリケーションを作っています。私のプロジェクトの1つの要件は、Focus Entryがシステムキーボードをポップしないことです。だから私はこのガイドでカスタムエントリを作った:Keyboard disabled guidexamarin.forms - EntryRendererへのテキストのバインド

すべてがうまくいく。 (「正常」のエントリが正常に動作しているので、私は、ViewModelにはうまく機能していることを確信していますが..

<local:SoftKeyboardDisabledEntry 
      Placeholder="Keyboard disabled Entry Control..." 
      x:Name="SoftKeyboardDisabledEntry" 
      Text="{Binding TestValue}"/> 

それが反応するdoes't:しかし、別の問題が

は、私は単純な結合を作る場合は...が来ます)

So. 質問はですが、このフィールドにバインドする方法はありますか?


カスタム項目のコード:NewXamarinProject名前空間内NewXamarinProject.Droid名前空間の

[assembly: ExportRenderer(typeof(SoftKeyboardDisabledEntry), typeof(SoftkeyboardDisabledEntryRenderer))] 
namespace NewXamarinProject.Droid 
{ 
    public class SoftkeyboardDisabledEntryRenderer : EntryRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) 
     { 
      base.OnElementChanged(e); 

      if (e.NewElement != null) 
      { 
       ((SoftKeyboardDisabledEntry)e.NewElement).PropertyChanging += OnPropertyChanging; 
      } 

      if (e.OldElement != null) 
      { 
       ((SoftKeyboardDisabledEntry)e.OldElement).PropertyChanging -= OnPropertyChanging; 
      } 

      // Disable the Keyboard on Focus 
      this.Control.ShowSoftInputOnFocus = false; 
     } 

     private void OnPropertyChanging(object sender, PropertyChangingEventArgs propertyChangingEventArgs) 
     { 
      // Check if the view is about to get Focus 
      if (propertyChangingEventArgs.PropertyName == VisualElement.IsFocusedProperty.PropertyName) 
      { 
       // incase if the focus was moved from another Entry 
       // Forcefully dismiss the Keyboard 
       InputMethodManager imm = (InputMethodManager)this.Context.GetSystemService(Context.InputMethodService); 
       imm.HideSoftInputFromWindow(this.Control.WindowToken, 0); 
      } 
     } 
    } 
} 

namespace NewXamarinProject 
{ 
    public class SoftKeyboardDisabledEntry : Entry 
    { 
    } 
} 

EDIT/SOLUTION:このコードは正常に動作しますが、私が作っこのエントリーがもう一度働いて、私は悪いことを説明できません。

答えて

0

私はこれがうまくいくかどうかは分かりませんが、試してみてください:

public class SoftKeyboardDisabledEntry : Entry 
{ 
    public static readonly new BindableProperty TextProperty = BindableProperty.Create(propertyName: "Text", 
     returnType: typeof(string), 
     declaringType: typeof(SoftKeyboardDisabledEntry), 
     defaultValue: default(string)); 

    public new string Text 
    { 
     get { return (string)GetValue(TextProperty); } 
     set { SetValue(TextProperty, value); } 
    } 
} 

これが役に立ちます。

+0

私はこれをコードに追加しましたが、残念ながらそれは何も変更されていないようです:/ ..あなたのコードはバインディングプロパティにのみ影響するはずですか?コードを追加する必要がありますか? –

+0

あなたのコードではどこか 'TestValue'にすべきではありませんか? –

+0

投稿したコードは、EntryのTextプロパティをオーバーライドします。残りは同じように動作するはずです。プロパティの名前を「テキスト」から別のものに変更し、XAMLでその名前を使用することができます。 getter/setterにブレークポイントを追加して、コードを実行しているかどうかを確認することもできます。 OnElementPropertyChangedメソッドも見てください。それを実装する必要があるかもしれません。 –

関連する問題