2017-09-08 98 views
0

我在製作xamarin.forms應用程序。我的項目的一個要求是,焦點輸入不應該彈出系統鍵盤。所以我做了一個自定義條目與本指南:Keyboard disabled guidexamarin.forms - 文本綁定到EntryRenderer

一切工作非常好。但是總會有另外一個問題..

如果我做簡單的綁定:

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

但這並沒有反應。(我相信,視圖模型是工作得很好,因爲「正常」的條目工作正常)

所以。 問題是,有沒有辦法使這個領域的綁定?在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 
    { 
    } 
} 

編輯/解決方案:此代碼工作正常,我做了這個條目再次和它的工作,我不能解釋什麼是壞的。

回答

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方法。你可能需要實現它。 –