2016-06-13 4 views
4

私はXamarin.Forms: Specifying additional keyboard optionsエントリをXAMLのキーボードで "Sentence Capitalization"に設定することはできますか?

を見て、これは素晴らしい見て、私はXAMLでそれを使用したい

Content = new StackLayout 
{ 
    Padding = new Thickness(0, 20, 0, 0), 
    Children = 
    { 
     new Entry 
     { 
      Keyboard = Keyboard.Create(KeyboardFlags.CapitalizeSentence) 
     } 
    } 
}; 

「文総額」にキーボードフラグを設定するには、コードのこのpeiceを見ました。

これはXAMLで可能ですか?

答えて

6

最初の回答で正しく述べたように、キーボードフラグを設定することはできません。あなたは確かにEntryをサブクラス化することができますが、よりエレガントな方法attached property作成することがあります:次に

public class KeyboardStyle 
    { 
     public static BindableProperty KeyboardFlagsProperty = BindableProperty.CreateAttached(
      propertyName: "KeyboardFlags", 
      returnType: typeof(string), 
      declaringType: typeof(InputView), 
      defaultValue: null, 
      defaultBindingMode: BindingMode.OneWay, 
      propertyChanged: HandleKeyboardFlagsChanged); 

     public static void HandleKeyboardFlagsChanged(BindableObject obj, object oldValue, object newValue) 
     { 
      var entry = obj as InputView; 

      if(entry == null) 
      { 
       return; 
      } 

      if(newValue == null) 
      { 
       return; 
      } 

      string[] flagNames = ((string)newValue).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
      KeyboardFlags allFlags = 0; 

      foreach (var flagName in flagNames) { 
       KeyboardFlags flags = 0; 
       Enum.TryParse<KeyboardFlags>(flagName.Trim(), out flags); 
       if(flags != 0) 
       { 
        allFlags |= flags;  
       } 
      } 

      Debug.WriteLine("Setting keyboard to: " + allFlags); 
      var keyboard = Keyboard.Create(allFlags); 

      entry.Keyboard = keyboard; 
     } 
    } 

をXAML内からそれを使用する(local名前空間を追加することを忘れないでください):

<?xml version="1.0" encoding="utf-8"?> 
<ContentPage 
     xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:local="clr-namespace:KeyboardTest" 
     x:Class="KeyboardTest.KeyboardTestPage"> 

    <Entry x:Name="entry" Text="Hello Keyboard" local:KeyboardStyle.KeyboardFlags="Spellcheck,CapitalizeSentence"/> 
</ContentPage> 

次のようなブランケットスタイルの一部としてこれを使用することもできます。

<Style TargetType="Entry"> 
    <Setter Property="local:KeyboardStyle.KeyboardFlags" 
      Value="Spellcheck,CapitalizeSentence"/> 
</Style> 
+1

これは素晴らしいアイデアです。私は添付されたプロパティを完全に忘れてしまった! – user1

+1

添付されたプロパティに関する後続の質問だけ。それをブランケットスタイルの一部として設定することは可能ですか?すなわち 'TargetType'を使用するか、またはそれぞれの' Entry'要素に対してこれらを設定する必要がありますか? – user1

1

今までこれはXAMLでは実行できません。

プログラムで行う必要があります。

さらに詳しい情報はKeyboardFlagsです。

提案として、Entryとそのプロパティを拡張することができます。

+1

ああ男は吸う。私はおそらく、バインド可能なプロパティとしてフラグを公開し、xamlでそれを行うことを可能にするコードでキーボードを設定する独自のコントロールを記述します。私はそれにラウンドを取得するときに私はここに戻って投稿します – user1

関連する問題