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:このコードは正常に動作しますが、私が作っこのエントリーがもう一度働いて、私は悪いことを説明できません。
私はこれをコードに追加しましたが、残念ながらそれは何も変更されていないようです:/ ..あなたのコードはバインディングプロパティにのみ影響するはずですか?コードを追加する必要がありますか? –
あなたのコードではどこか 'TestValue'にすべきではありませんか? –
投稿したコードは、EntryのTextプロパティをオーバーライドします。残りは同じように動作するはずです。プロパティの名前を「テキスト」から別のものに変更し、XAMLでその名前を使用することができます。 getter/setterにブレークポイントを追加して、コードを実行しているかどうかを確認することもできます。 OnElementPropertyChangedメソッドも見てください。それを実装する必要があるかもしれません。 –